私は大規模なオープン ソース ライブラリを使用しており、いくつかのクラスの個人用サブクラスを生成する必要があります。最善の戦略は何ですか? 元のライブラリを変更せずに維持し、更新時に簡単に再構成できるようにしたいと考えています。私のコードがプロジェクトに貢献する価値があるとは考えにくいです (ただし、これを可能にする方法で書くことは喜んで行います)。
問題は一般的なものですが、私の例で説明します。への書き込みルーチンを持つApache PDFBoxを使用していjava.awt.Graphics2D
ます。これを Graphics2D ( ) のサブクラスを提供するApache Batikツールキットに置き換えたorg.apache.batik.svggen.SVGGraphics2D
ので、SVG 表現をキャプチャできます。インスタンスを作成します
public static org.apache.batik.svggen.SVGGraphics2D createSVG() {
org.w3c.dom.DOMImplementation domImpl =
org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation();
org.w3c.dom.Document document =
domImpl.createDocument("http://www.w3.org/2000/svg", "svg", null);
return new org.apache.batik.svggen.SVGGraphics2D(document);
}
PDFBox がグラフィックを使用する場所はorg.apache.pdfbox.PDFReader
、新しいグラフィックを使用できるように編集した場所です。
protected void showPage(int pageNumber)
{
try
{
PageDrawer drawer = new PageDrawer();
PageWrapper wrapper = new PageWrapper( this );
PDPage page = (PDPage)pages.get(pageNumber);
wrapper.displayPage( page );
PDRectangle cropBox = page.findCropBox();
Dimension drawDimension = cropBox.createDimension();
svg = PDFPagePanel.createSVG(); // MY EDIT!!!!!!!!!
drawer.drawPage( svg, page, drawDimension );
writeSVG(pageNumber);
}
catch (IOException exception)
{
exception.printStackTrace();
}
}
私はそれを機能させました(それは問題ではありません)。私の懸念は、サブクラスを生成して使用するためだけに、多数の分散 PDFBox クラスをハック/編集および再コンパイルする必要があったことです。ライブラリと同じパッケージにPMRPDFReaderなどのクラスがあります。とてもごちゃごちゃしていて、どこを編集したのかすぐには思い出せません。
ライブラリをそのまま使用し、サブクラスを追加/リンクするだけでよいと思います。私はmavenを使用しているので、元のクラスを除外する方法があるかもしれません。