簡體   English   中英

PDFBox加擾文本

[英]PDFBox scrambling the text

我一直在嘗試編輯PDF文檔以預先填寫表單條目。 我已經工作了(有點)。 我要添加的文本很好。 但是,其他已經存在的文本似乎已被替換為“&%£!£!”符號。我已經確定這與下面代碼中的“ contentStream”部分有關。它似乎是“ setFont”行。如果將其刪除,則該頁面將保持正常狀態……只是不再顯示“ Hello Richard”文本!

請幫助!

package pdfboxtest;

import java.awt.Color;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;

public class PDFFormFiller {

    private static final String R40_NEW_FORM_PATH = "c:\\temp\\hmrc-r40.pdf";
    private static final String R40_COMPLETED_FORM_PATH = "c:\\temp\\hmrc-r40-complete.pdf";

    public static void main(String[] args) throws Exception {
        PDDocument doc = PDDocument.load(R40_NEW_FORM_PATH);

        addTextToPage(doc);

        doc.save(R40_COMPLETED_FORM_PATH);
        doc.close();
    }

    private static void addTextToPage(PDDocument doc) throws Exception {
        List pages = doc.getDocumentCatalog().getAllPages();
        PDPage firstPage = (PDPage) pages.get(0);
        PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true);

        contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24);
        contentStream.beginText();
        contentStream.setNonStrokingColor(Color.BLACK);
        contentStream.moveTextPositionByAmount(100, 200);
        contentStream.drawString("HELLO RICHARD!!");
        contentStream.endText();
        contentStream.close();

    }
}

這是表格的頂部,然后在其他位置添加文本在我將文字添加到其他地方之后,這部分文字就變得瘋狂了!我沒有編輯此位

正如評論中已經假設的那樣,這是由於PDFBox問題引起的,我在此答案中描述了一種解決方法。 此問題在PDFBox的1.8.2版中仍然存在,但同時已針對1.8.3版和2.0.0版進行了修復,請參見。 PDFBOX-1753

在您的情況下,解決方法如下更改addTextToPage方法:

private static void addTextToPage(PDDocument doc) throws IOException {
    List pages = doc.getDocumentCatalog().getAllPages();
    PDPage firstPage = (PDPage) pages.get(0);
    PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true);

    firstPage.getResources().getFonts(); // <<<<<<

    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24);
    contentStream.beginText();
    contentStream.setNonStrokingColor(Color.BLACK);
    contentStream.moveTextPositionByAmount(100, 200);
    contentStream.drawString("HELLO RICHARD!!");
    contentStream.endText();
    contentStream.close();
}

添加的行強制執行一個初始化, new PDPageContentStream忘記該初始化,但是setFont取決於完成。 您可以在上面引用的答案中找到詳細信息。 您可能需要通知PDFBox開發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM