Skip to content

Commit

Permalink
Merge pull request #131 from jodersky/page-numbering
Browse files Browse the repository at this point in the history
Extract page number from image src URIs
  • Loading branch information
pbrant committed Nov 7, 2017
2 parents 5d12eeb + 0d1bb7d commit 4b43748
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -850,14 +850,16 @@ public void drawImage(FSImage fsImage, int x, int y) {
private void drawPDFAsImage(PDFAsImage image, int x, int y) {
URI uri = image.getURI();
PdfReader reader = null;
int pageNumber = 1;

try {
reader = getReader(uri);
pageNumber = PDFAsImage.pageNumberFromURI(uri);
} catch (IOException e) {
throw new XRRuntimeException("Could not load " + uri + ": " + e.getMessage(), e);
}

PdfImportedPage page = getWriter().getImportedPage(reader, 1);
PdfImportedPage page = getWriter().getImportedPage(reader, pageNumber);

AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.translate(0, image.getHeightAsFloat());
Expand All @@ -880,10 +882,10 @@ private void drawPDFAsImage(PDFAsImage image, int x, int y) {
}

public PdfReader getReader(URI uri) throws IOException {
PdfReader result = (PdfReader) _readerCache.get(uri);
PdfReader result = (PdfReader) _readerCache.get(uri.getPath());
if (result == null) {
result = new PdfReader(getSharedContext().getUserAgentCallback().getBinaryResource(uri.toString()));
_readerCache.put(uri, result);
_readerCache.put(uri.getPath(), result);
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public ImageResource getImageResource(String uriStr) {
URI uri = new URI(uriStr);
PdfReader reader = _outputDevice.getReader(uri);
PDFAsImage image = new PDFAsImage(uri);
Rectangle rect = reader.getPageSizeWithRotation(1);
Rectangle rect = reader.getPageSizeWithRotation(PDFAsImage.pageNumberFromURI(uri));
image.setInitialWidth(rect.getWidth() * _outputDevice.getDotsPerPoint());
image.setInitialHeight(rect.getHeight() * _outputDevice.getDotsPerPoint());
resource = new ImageResource(uriStr, image);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import java.net.URI;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xhtmlrenderer.extend.FSImage;

Expand Down Expand Up @@ -110,5 +112,17 @@ public float scaleHeight() {
public float scaleWidth() {
return _width / _unscaledWidth;
}


private static Pattern pageUriPattern = Pattern.compile("page=(\\d+)");

public static int pageNumberFromURI(URI uri) {
String fragment = uri.getFragment();
int pageNumber = 1;
Matcher pageMatcher = pageUriPattern.matcher(fragment);
if(!fragment.isEmpty() && pageMatcher.find()) {
pageNumber = Integer.parseInt(pageMatcher.group(1));
}
return pageNumber;
}

}

0 comments on commit 4b43748

Please sign in to comment.