aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/apache/fop/render/pdf
diff options
context:
space:
mode:
authorKeiron Liddle <keiron@apache.org>2002-07-04 14:08:20 +0000
committerKeiron Liddle <keiron@apache.org>2002-07-04 14:08:20 +0000
commit072a9d2808472eec30aa1c272ee4cb50e596a3c9 (patch)
treef82cc18789323e776b399f063b0c0ec85301bb28 /src/org/apache/fop/render/pdf
parent15e5fd84a05a9ebd8f26096bcbe2bc9e36fb8345 (diff)
downloadxmlgraphics-fop-072a9d2808472eec30aa1c272ee4cb50e596a3c9.tar.gz
xmlgraphics-fop-072a9d2808472eec30aa1c272ee4cb50e596a3c9.zip
improved gstate usage
now get get image if in pdf without using cache implemented some image parameters: size,clipping... git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194961 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/org/apache/fop/render/pdf')
-rw-r--r--src/org/apache/fop/render/pdf/FopPDFImage.java6
-rw-r--r--src/org/apache/fop/render/pdf/PDFRenderer.java75
2 files changed, 53 insertions, 28 deletions
diff --git a/src/org/apache/fop/render/pdf/FopPDFImage.java b/src/org/apache/fop/render/pdf/FopPDFImage.java
index fac035be0..bbfb83f6c 100644
--- a/src/org/apache/fop/render/pdf/FopPDFImage.java
+++ b/src/org/apache/fop/render/pdf/FopPDFImage.java
@@ -34,15 +34,17 @@ public class FopPDFImage implements PDFImage {
String softMaskRef;
boolean isPS = false;
HashMap filters;
+ String key;
- public FopPDFImage(FopImage im) {
+ public FopPDFImage(FopImage im, String k) {
fopImage = im;
+ key = k;
isPS = (fopImage instanceof EPSImage);
}
// key to look up XObject
public String getKey() {
- return fopImage.getURL();
+ return key;
}
public void setup(PDFDocument doc) {
diff --git a/src/org/apache/fop/render/pdf/PDFRenderer.java b/src/org/apache/fop/render/pdf/PDFRenderer.java
index c287adf43..12bf786be 100644
--- a/src/org/apache/fop/render/pdf/PDFRenderer.java
+++ b/src/org/apache/fop/render/pdf/PDFRenderer.java
@@ -465,8 +465,17 @@ public class PDFRenderer extends PrintRenderer {
}
}
- public void renderImage(Image image) {
+ public void renderImage(Image image, Rectangle2D pos) {
String url = image.getURL();
+
+ PDFXObject xobject = pdfDoc.getImage(url);
+ if(xobject != null) {
+ int w = (int)pos.getWidth() / 1000;
+ int h = (int)pos.getHeight() / 1000;
+ placeImage((int)pos.getX() / 1000, (int)pos.getY() / 1000, w, h, xobject.getXNumber());
+ return;
+ }
+
ImageFactory fact = ImageFactory.getInstance();
FopImage fopimage = fact.getImage(url, userAgent);
if(fopimage == null) {
@@ -484,7 +493,6 @@ public class PDFRenderer extends PrintRenderer {
String ns = ((XMLImage)fopimage).getNameSpace();
renderDocument(doc, ns);
-
} else if("image/svg+xml".equals(mime)) {
if(!fopimage.load(FopImage.ORIGINAL_DATA, userAgent)) {
return;
@@ -493,38 +501,35 @@ public class PDFRenderer extends PrintRenderer {
String ns = ((XMLImage)fopimage).getNameSpace();
renderDocument(doc, ns);
-
} else if("image/eps".equals(mime)) {
if(!fopimage.load(FopImage.ORIGINAL_DATA, userAgent)) {
return;
}
- FopPDFImage pdfimage = new FopPDFImage(fopimage);
+ FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
int xobj = pdfDoc.addImage(null, pdfimage).getXNumber();
fact.releaseImage(url, userAgent);
} else if("image/jpg".equals(mime)) {
if(!fopimage.load(FopImage.ORIGINAL_DATA, userAgent)) {
return;
}
- FopPDFImage pdfimage = new FopPDFImage(fopimage);
+ FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
int xobj = pdfDoc.addImage(null, pdfimage).getXNumber();
fact.releaseImage(url, userAgent);
+
+ int w = (int)pos.getWidth() / 1000;
+ int h = (int)pos.getHeight() / 1000;
+ placeImage((int)pos.getX() / 1000, (int)pos.getY() / 1000, w, h, xobj);
} else {
if(!fopimage.load(FopImage.BITMAP, userAgent)) {
return;
}
- FopPDFImage pdfimage = new FopPDFImage(fopimage);
+ FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
int xobj = pdfDoc.addImage(null, pdfimage).getXNumber();
fact.releaseImage(url, userAgent);
- closeText();
- int w = fopimage.getWidth();
- int h = fopimage.getHeight();
-
- currentStream.add("ET\nq\n" + ((float)w) + " 0 0 "
- + ((float)-h) + " "
- + (((float)currentBlockIPPosition) / 1000f) + " "
- + (((float)(currentBPPosition + 1000 * h)) / 1000f) + " cm\n" + "/Im"
- + xobj + " Do\nQ\nBT\n");
+ int w = (int)pos.getWidth() / 1000;
+ int h = (int)pos.getHeight() / 1000;
+ placeImage((int)pos.getX() / 1000, (int)pos.getY() / 1000, w, h, xobj);
}
// output new data
@@ -535,7 +540,16 @@ public class PDFRenderer extends PrintRenderer {
}
}
- public void renderForeignObject(ForeignObject fo) {
+ protected void placeImage(int x, int y, int w, int h, int xobj) {
+ currentStream.add("q\n" + ((float)w) + " 0 0 "
+ + ((float)-h) + " "
+ + (((float)currentBlockIPPosition) / 1000f + x) + " "
+ + (((float)(currentBPPosition + 1000 * h)) / 1000f + y) + " cm\n" + "/Im"
+ + xobj + " Do\nQ\n");
+
+ }
+
+ public void renderForeignObject(ForeignObject fo, Rectangle2D pos) {
Document doc = fo.getDocument();
String ns = fo.getNameSpace();
renderDocument(doc, ns);
@@ -566,25 +580,34 @@ public class PDFRenderer extends PrintRenderer {
context.setProperty(PDFXMLHandler.PDF_FONT_SIZE, new Integer(currentFontSize));
context.setProperty(PDFXMLHandler.PDF_XPOS, new Integer(currentBlockIPPosition));
context.setProperty(PDFXMLHandler.PDF_YPOS, new Integer(currentBPPosition));
- closeText();
- currentStream.add("ET\n");
userAgent.renderXML(context, doc, ns);
- currentStream.add("BT\n");
}
public void renderViewport(Viewport viewport) {
- /*if (clip && w != 0 && h != 0) {
- currentStream.add(x / 1000f + " " + y / 1000f + " m\n");
- currentStream.add((x + w) / 1000f + " " + y / 1000f + " l\n");
- currentStream.add((x + w) / 1000f + " " + (y - h) / 1000f
- + " l\n");
- currentStream.add(x / 1000f + " " + (y - h) / 1000f + " l\n");
+ closeText();
+ currentStream.add("ET\n");
+ if (viewport.getClip()) {
+ currentStream.add("q\n");
+
+ float x = currentBlockIPPosition / 1000f;
+ float y = (currentBPPosition + viewport.getOffset()) / 1000f;
+ float width = viewport.getWidth() / 1000f;
+ float height = viewport.getHeight() / 1000f;
+ currentStream.add(x + " " + y + " m\n");
+ currentStream.add((x + width) + " " + y + " l\n");
+ currentStream.add((x + width) + " " + (y + height) + " l\n");
+ currentStream.add(x + " " + (y + height) + " l\n");
currentStream.add("h\n");
currentStream.add("W\n");
currentStream.add("n\n");
- }*/
+ }
super.renderViewport(viewport);
+
+ if (viewport.getClip()) {
+ currentStream.add("Q\n");
+ }
+ currentStream.add("BT\n");
}
public void renderLeader(Leader area) {