Sélectionnez le texte et l'arrière-plan pour l'ensemble du document pdf à l'aide de iText java
Je cherche à prendre un fichier pdf, à définir la couleur d'arrière-plan de chaque page sur noir et tout le texte sur blanc.
Quel est le moyen le plus simple pour moi de le faire? Existe-t-il un appel API pour sélectionner l'arrière-plan de chaque page et tout le texte du fichier? Ou dois-je parcourir chaque page d'une manière ou d'une autre?
1 answers
Comme mentionné dans mon dernier commentaire à votre question, peindre un rectangle blanc en mode de fusion Différence devrait faire le travail tant que l'inversion de toutes les couleurs est une solution suffisante pour votre tâche:
void invert(File source, File target) throws IOException, DocumentException
{
PdfReader reader = new PdfReader(source.getPath());
OutputStream os = new FileOutputStream(target);
PdfStamper stamper = new PdfStamper(reader, os);
invert(stamper);
stamper.close();
os.close();
}
void invert(PdfStamper stamper)
{
for (int i = stamper.getReader().getNumberOfPages(); i>0; i--)
{
invertPage(stamper, i);
}
}
void invertPage(PdfStamper stamper, int page)
{
Rectangle rect = stamper.getReader().getPageSize(page);
PdfContentByte cb = stamper.getOverContent(page);
PdfGState gs = new PdfGState();
gs.setBlendMode(PdfGState.BM_DIFFERENCE);
cb.setGState(gs);
cb.setColorFill(new GrayColor(1.0f));
cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
cb.fill();
cb = stamper.getUnderContent(page);
cb.setColorFill(new GrayColor(1.0f));
cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
cb.fill();
}
invertPage
dessine le reactangle blanc mentionné précédemment dans la différence de mode de fusion sur la page. De plus, il peint un rectangle blanc normalement sous la page; cela s'est avéré nécessaire au moins pour la version Acrobat Reader que j'ai à portée de main ici.
Vous voudrez peut-être modifier quelque peu le code pour améliorer la lecture du résultat. Peut-être l'exclusion du mode de fusion (BM_EXCLUSION
) est plus approprié, ou peut-être d'autres réglages d'état graphique améliorent votre expérience de lecture. Juste être créatif! ;)
Pour certains arrière-plans sur le mode de fusion PDF, vous voudrez peut-être lire la section 11.3.5 Mode de fusion dans la spécification PDF ISO 32000-1 et étudier les exemples liés à la transparencede iText dans Action - 2e édition.
PS: Ce code inverse uniquement le contenu de la page. Les annotations ne sont pas affectées. Si cela s'avère nécessaire, vous pourriez faire quelque chose de similaire à leurs flux d'apparence.