2009-01-19 9 views
11

Je me demandais si quelqu'un avait une expérience de travail par programmation avec des fichiers .pdf. J'ai un fichier .pdf et j'ai besoin de recadrer chaque page jusqu'à une certaine taille. Après une rapide recherche sur Google, j'ai trouvé la bibliothèque pyPdf pour python mais mes expériences avec elle ont échoué. Lorsque j'ai changé les attributs cropBox et trimBox sur un objet de page, les résultats n'étaient pas ce que je m'attendais et semblaient être assez aléatoires.Recadrage des pages d'un fichier .pdf

Quelqu'un a-t-il déjà eu cette expérience? Les exemples de code seraient bien appréciés, de préférence en python.

+0

Bonne question mais un peu surpris il n'a pas déjà été fermé pour être trop large. –

Répondre

19

pypdf fait ce que j'attends dans ce domaine. En utilisant le script suivant:

#!/usr/bin/python 
# 

from pyPdf import PdfFileWriter, PdfFileReader 

with open("in.pdf", "rb") as in_f: 
    input1 = PdfFileReader(in_f) 
    output = PdfFileWriter() 

    numPages = input1.getNumPages() 
    print "document has %s pages." % numPages 

    for i in range(numPages): 
     page = input1.getPage(i) 
     print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y() 
     page.trimBox.lowerLeft = (25, 25) 
     page.trimBox.upperRight = (225, 225) 
     page.cropBox.lowerLeft = (50, 50) 
     page.cropBox.upperRight = (200, 200) 
     output.addPage(page) 

    with open("out.pdf", "wb") as out_f: 
     output.write(out_f) 

Le document qui en résulte a une boîte de garniture qui est 200x200 points, et commence à 25,25 points à l'intérieur de la boîte de médias. La zone de recadrage est de 25 points à l'intérieur de la zone de rognage.

Voici comment mon document exemple regarde dans acrobate professionnel après traitement avec le code ci-dessus: crop pages screenshot

Ce document apparaît vide lorsqu'il est chargé dans Acrobat Reader.

+0

Ce code a le même effet que le code que j'expérimentais; les pages du document résultant ont certainement été rognées, mais toutes vierges. Des idées pour lesquelles cela pourrait être? – johannth

+0

Vous avez probablement vérifié ceci mais tout ce que je peux penser est que vous recadrez une petite partie du PDF qui est vide? Si vous avez accès à acrobat pro, vous pouvez utiliser l'outil des pages de recadrage pour afficher toutes les zones de page. Je ne connais aucun outil gratuit qui puisse le faire. Peut-être preuve ou okular pour Linux? – danio

+0

Je me sens vraiment stupide. J'ai mal lu l'api et j'ai supposé que le cropbox était upperLeft, lowerRight. Donc, j'étais en train de recadrer sur une partie vide de la page. – johannth

1

Vous cherchez probablement une solution gratuite, mais si vous avez de l'argent à dépenser, PDFlib est une fabuleuse bibliothèque. Cela ne m'a jamais déçu.

0

Vous pouvez convertir le PDF en Postscript (pstopdf ou ps2pdf) et utiliser le traitement de texte sur le fichier Postscript. Après cela, vous pouvez convertir la sortie en PDF.

Cela fonctionne bien si les fichiers PDF que vous souhaitez traiter sont tous générés par la même application et sont quelque peu similaires. Si elles proviennent de différentes sources, il est généralement difficile de traiter les fichiers Postscript - la structure varie beaucoup. Mais même si vous migrez, vous pouvez corriger les tailles de page et autres avec quelques expressions régulières.

0

L'API Javascript d'Acrobat possède une méthode setPageBoxes, mais Adobe ne fournit aucun exemple de code Python. Seulement C++, C# et VB.

Questions connexes