2016-11-21 33 views
0

多くの見えないパスが含まれているpdfがあります。パスの量が後で問題を生じるので、私は白い色を持っているものを削除したいと思います。PDFClownを使用してPDFファイルからオブジェクトを削除する方法

これまでのところ、私はContentScannerでこれを行うにしようとしています:

public class FilterWhitePathScanner implements Scanner { 
private static final Logger LOG = LoggerFactory.getLogger(FilterWhitePathScanner.class); 

private int count = 0; 

public void scan(ContentScanner level) { 
    if (level == null) 
     return; 

    while (level.moveNext()) { 
     ContentObject object = level.getCurrent(); 
     if (object instanceof ContainerObject) { 
      // Scan the inner level! 
      scan(level.getChildLevel()); 
     } else if (object instanceof org.pdfclown.documents.contents.objects.Path) { 
      AffineTransform ctm = level.getState().getCtm(); 
      Color<?> strokeColor = level.getState().getStrokeColor(); 
      Color<?> fillColor = level.getState().getFillColor(); 
      if (checkWhite(fillColor) && checkWhite(strokeColor)) { 
       level.remove(); 
      } else { 
       LOG.info("Stroke Color " + strokeColor + " - Fill Color " + fillColor); 
      } 
     } else { 
      LOG.info("Object:" + object); 
     } 
    } 
} 

それは正しくパスを認識しますが、最終的にこれらは、PDFから削除されません。ここでPDFを扱うコード(それがソースPDFから1ページだけを抽出します):

 Document targetDoc = new File().getDocument(); 
     targetDoc.getPages().add(sourceDoc.getPages().get(pageNum).clone(targetDoc)); 
     Page page = targetDoc.getPages().get(0); 
     Contents contents = page.getContents(); 
     FilterWhitePathScanner filterWhitePathScanner = new FilterWhitePathScanner(); 
     filterWhitePathScanner.scan(new ContentScanner(contents)); 
     LOG.info("White Paths: " + filterWhitePathScanner.getCount()); 
     targetDoc.getFile().save(tempFilePath.toFile(), SerializationModeEnum.Standard); 

は、保存されたPDFファイルは、まだ私が削除しようとしたパスが含まれています。最終的にPDFからオブジェクトを削除する方法はありますか?

おかげで、 トーマス

答えて

1

は最後のJavaドキュメントに解決策を見つけた: PDFファイルへの変更を永続化するためにcontents.flush();を呼び出す必要があります。

私はこの呼び出しをsaveを呼び出す前にPDF処理コードに追加しています。

関連する問題