iText 5.5.10でPDF/UA文書を作成する際、改行前のすべてのスペースが削除されたように見えます。次のサンプルでは、このテキスト(改行の前にはスペースに気付かない)を作成:スクリーンリーダーで読んだときiText 5を使用したPDF/UAでの改行の前に空白がありません
The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog.
は、連結の言葉がありますが(予告 "quickbrown" と "foxjumps"):
連結は、改行がPDFドキュメントに挿入されている場合に発生します。ここ
は(違いを作るようには見えないので、サンプルを小さくするためには使用されない埋め込むPDFAWriterとフォント)を再生するための最小のサンプルである:このサンプルの
package sandbox.pdfa;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class PdfUaSpike {
static public void main(String args[]) throws IOException, DocumentException {
final String DEST = "results/pdfa/pdfua.pdf";
File file = new File(DEST);
file.getParentFile().mkdirs();
new PdfUaSpike().createPdf(DEST).showExtractedText(DEST);
}
public PdfUaSpike createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
writer.setPdfVersion(PdfWriter.VERSION_1_7);
writer.setTagged();
writer.setViewerPreferences(PdfWriter.DisplayDocTitle);
document.addLanguage("en-US");
document.addTitle("English pangram");
writer.createXmpMetadata();
document.open();
Font font = FontFactory.getFont(FontFactory.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED, 20);
{
Paragraph p = new Paragraph();
p.setFont(font);
String sampleText = IntStream.range(0, 3)
.mapToObj(i -> "The quick brown fox jumps over the lazy dog. ")
.collect(Collectors.joining());
p.add(sampleText);
document.add(p);
}
document.close();
return this;
}
private void showExtractedText(String path) throws IOException {
System.out.println("Notice that spaces before linebreaks have been removed:" + System.lineSeparator());
String extractedText = PdfTextExtractor.getTextFromPage(new PdfReader(path), 1);
System.out.println(extractedText);
}
}
依存性:
com.itextpdf:itextpdf:jar:5.5.10:compile
com.itextpdf:itext-pdfa:jar:5.5.10:compile
WordからエクスポートされたPDFをテストする場合、改行がドキュメントに残る前にスペースが表示され、スクリーンリーダーで正常に動作します。
改行の前にスペースを保持するようiTextを設定する方法はありますか?
iText PDFはLinuxで作成され、Windowsでテストされています。