2016-10-11 6 views
0

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"):

Words are concatenated in PAC

Concatenated words in NVDA Speech Viewer

連結は、改行が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でテストされています。

答えて

0

あなたのスタックのある部分がUnix linebreaks(LF)のドキュメントを作成し、LFの前のバイトを盲目的に削除することでウィンドウの改行(CR + LF)を "修正"しようとします。最初の場所。

関連する問題