2016-09-12 4 views
0

J'utilise l'API DHL Shipping (XML) pour demander des envois DHL et imprimer automatiquement l'étiquette d'expédition répondue.PDFBox imprimer avec l'outil de ligne de commande PrintPDF

Voici comment le système fonctionne:

Le XML de réponse DHL contient un fichier PDF contenant base64-:

page 1. L'étiquette d'expédition (Impression sur un autocollant qui est mis sur l'emballage)

page 2. le document d'archives (doit être imprimé séparément et remis au courrier d'expédition)

afin de séparer les deux pdfs, je suis décoder le base64, puis exécutez une PDFSplit en utilisant la commande en ligne PDFBox outils, un d enfin imprimer chaque document respectif à leur imprimante respective:

$filename = "dhlexpress_labels/".date("Ymd_his")."_{$_REQUEST['id']}.pdf"; 
//Get the pdf response from DHL 
$data = file_get_contents("path/dhl_request_shipment.php?".http_build_query($_REQUEST)); 
//Put decoded data in the file 
file_put_contents($filename,base64_decode($data)); 
//Split the file into two 
$exec = 'java pdfbox-app-1.8.3.jar PDFSplit -split 1 ' . $filename; 
exec($exec); 
//Print each file 
$exec = 'java pdfbox-app-1.8.3.jar PrintPDF -silentPrint -printerName DHLPrinter ' . str_replace('.pdf',-0.'.pdf',$filename); 
exec($exec); 
$exec = 'java pdfbox-app-1.8.3.jar PrintPDF -silentPrint -printerName PaperPrinter ' . str_replace('.pdf',-1.'.pdf',$filename); 
exec($exec); 

Le problème est le suivant: La réponse de DHL contient un pdf qui a les dimensions d'un autocollant 8 « x4 », qui imprime parfaitement sur le DHLPrinter, mais sur le PaperPrinter il n'imprime pas le 5mm gauche et supérieur de l'étiquette. Voir ci-joint photo:

Margins not printed

Je pense que cela se produit parce que les marges sont remplacées par le pdf en quelque sorte, ce qui conduit à l'extérieur pdf déplacer la zone d'impression.

Est-ce que quelqu'un sait d'un moyen de résoudre ce problème? Je veux que l'impression soit complètement automatisée et ne s'arrêtera pas pour le faire. Je me demande simplement si quelqu'un a des idées créatives sur la façon d'éditer les marges pdf.

+0

Veuillez essayer la version 2.0.2. Et un instantané 2.0.3 https://repository.apache.org/content/groups/snapshots/org/apache/pdfbox/pdfbox-app/2.0.3-SNAPSHOT/ il y a une nouvelle option qui pourrait aider. –

+0

Si cela ne fonctionne pas, veuillez télécharger un autocollant de démonstration. –

+0

Merci @TilmanHausherr J'ai utilisé l'instantané 2.0.3. L'option 'orientation' était-elle celle dont vous parliez? –

Répondre

0

J'ai trouvé une solution. En utilisant OverlayPDF, je superposer le document d'archives sur un PDF vide et il apparaît au milieu comme celui-ci: Centered Label

Je viens d'ajouter ces deux lignes de code et cela a fonctionné comme un charme:

$exec = java -jar pdfbox-app-2.0.3-20160908.164926-191.jar OverlayPDF blank.pdf '. str_replace('.pdf','-1'.'.pdf',$filename) .' '. str_replace('.pdf','-1'.'.pdf',$filename); 
exec($exec); 

I essayé en utilisant l'attribut 'orientation' de PrintPDF, mais en fait il l'a fait plus petit: Orientation: vertical Orientation: horizontale a été totalement foiré. L'image est incluse dans le commentaire ci-dessous.

+0

Orientation: 'horizontal' http://i65.tinypic.com/1iig6g.jpg –

+0

PDFBox a des problèmes d'impression d'étiquettes, par ex. https://issues.apache.org/jira/browse/PDFBOX-3117. Celui-là mentionne même une solution de contournement, mais il faudrait utiliser Java. –