Java >> Java Program >  >> Java

PDFBox Hur man ställer in PDF-dokumentsäkerhetsutskrift till låg upplösning

TL;DR;Hur kan PDFBox användas för att generera en PDF med "låg upplösning" under Dokumentsäkerhet> Detaljer> Utskrift?

Jag försöker skapa en PDF med Java och jag försöker ställa in värdet på utskriftsegenskapen, under dokumentsäkerhet, till låg upplösning.

Jag försöker göra det här eftersom applikationen jag arbetar med, snubblade över denna krom-bugg https://bugs.chromium.org/p/chromium/issues/detail?id=1307219 och jag försöker förstå vilken del av det sätter ett sådant värde (och, naturligtvis, den del som hanterar PDF-filer är en gammal spagettikoduppsättning klasser)

Så vitt jag förstått från PDFBox-dokument bör mitt mål kunna uppnås genom att spela med klassen AccessPermission och setCanPrintDegraded()

Jag har skapat en enkel klass som genererar PDF-filer med PDFBox, men oavsett vad jag försöker kommer varje PDF jag skapar ut med "hög upplösning". Använder jag rätt flagga? Tack!

public static void main(String[] args) throws IOException {

    try (PDDocument doc = new PDDocument()) {

        PDPage myPage = new PDPage();
        doc.addPage(myPage);


        try (PDPageContentStream cont = new PDPageContentStream(doc, myPage)) {

            cont.beginText();

            cont.setFont(PDType1Font.TIMES_ROMAN, 12);
            cont.setLeading(14.5f);

            cont.newLineAtOffset(25, 700);
            String line1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " +
                    "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " ;
            cont.showText(line1);
            cont.newLine();
            String line2 = "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
                    "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " ;
            cont.showText(line2);
            cont.newLine();
            String line3 = "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ;
            cont.showText(line3);
            cont.newLine();

            cont.endText();
        }

        AccessPermission permission = new AccessPermission();
        permission.setCanPrintDegraded(true);
        permission.setReadOnly();
        StandardProtectionPolicy policy = new StandardProtectionPolicy("", "", permission);
        doc.protect(policy);
        doc.save("src/main/resources/setCanPrintDegradedTrueANDreadOnly.pdf");

    }
}

Svar

Hittade lösningen tack vare @TilmanHausherr (se kommentarerna till frågan).

För att få "låg kvalitet" under Dokumentsäkerhet> Detaljer> Utskrift

Jag var tvungen att tillämpa följande ändringar på den ursprungliga koden:

  1. Jag har angett följande behörigheter:

    AccessPermission permission =new AccessPermission(); permission.setCanPrint(true); permission.setCanPrintDegraded(false);

  2. Jag har krypterat pdf:en

    Int keyLeght =128 StandardProtectionPolicy policy =ny StandardProtectionPolicy("test", "", behörighet); policy.setEncryptionKeyLength(keyLength);

Här är den uppdaterade koden:

import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class JavaPdfBoxWriteText {

    public static void main(String[] args) throws IOException {

        try (PDDocument doc = new PDDocument()) {
            int keyLength = 128;
            PDPage myPage = new PDPage();
            doc.addPage(myPage);


            try (PDPageContentStream cont = new PDPageContentStream(doc, myPage)) {

                cont.beginText();

                cont.setFont(PDType1Font.TIMES_ROMAN, 12);
                cont.setLeading(14.5f);

                cont.newLineAtOffset(25, 700);
                String line1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " +
                        "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " ;
                cont.showText(line1);
                cont.newLine();
                String line2 = "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
                        "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " ;
                cont.showText(line2);
                cont.newLine();
                String line3 = "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ;
                cont.showText(line3);
                cont.newLine();

                cont.endText();
            }
            AccessPermission permission = new AccessPermission();
            permission.setCanPrint(true);
            permission.setCanPrintDegraded(false);

            StandardProtectionPolicy policy = new StandardProtectionPolicy("test", "", permission);
            policy.setEncryptionKeyLength(keyLength);
            doc.protect(policy);
            doc.save("src/main/resources/testPDF.pdf");

        }
    }
}

Java-tagg