[英]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.