iText7 adding SVG into PdfDocument and aligning SVG image properly within the PDF
I am able to add the SVG image in PDF using the below code but alignment of image is going for a toss. I would like to keep image in a confined area (let's say 300 x 300 size always). If image is bigger, it should shrink/compress and fit into this size. How can we achieve this.
PdfDocument doc = null;
try {
doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
URL svgUrl = null;
String svgPath = "...svgPathHere";
try {
svgUrl = new URL(svgPath);
} catch(MalformedURLException mue) {
System.out.println("Exception caught" + mue.getMessage() );
}
if (svgUrl == null){
try {
svgUrl = new File(svgPath).toURI().toURL();
} catch(Throwable th) {
System.out.println("Exception caught" + th.getMessage());
}
}
SvgConverter.drawOnDocument(svgUrl.openStream(), doc, 1, 100, 200); // 100 and 200 are x and y coordinate of the location to draw at
doc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Adding to the same above question, drawOnDocument() method of SvgConverter provides us the control to postion our svg through x and y cordinates. Is there a better way to handle postioning? (like Top-left, Top-right)
image pdf svg pdf-generation itext7
add a comment |
I am able to add the SVG image in PDF using the below code but alignment of image is going for a toss. I would like to keep image in a confined area (let's say 300 x 300 size always). If image is bigger, it should shrink/compress and fit into this size. How can we achieve this.
PdfDocument doc = null;
try {
doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
URL svgUrl = null;
String svgPath = "...svgPathHere";
try {
svgUrl = new URL(svgPath);
} catch(MalformedURLException mue) {
System.out.println("Exception caught" + mue.getMessage() );
}
if (svgUrl == null){
try {
svgUrl = new File(svgPath).toURI().toURL();
} catch(Throwable th) {
System.out.println("Exception caught" + th.getMessage());
}
}
SvgConverter.drawOnDocument(svgUrl.openStream(), doc, 1, 100, 200); // 100 and 200 are x and y coordinate of the location to draw at
doc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Adding to the same above question, drawOnDocument() method of SvgConverter provides us the control to postion our svg through x and y cordinates. Is there a better way to handle postioning? (like Top-left, Top-right)
image pdf svg pdf-generation itext7
add a comment |
I am able to add the SVG image in PDF using the below code but alignment of image is going for a toss. I would like to keep image in a confined area (let's say 300 x 300 size always). If image is bigger, it should shrink/compress and fit into this size. How can we achieve this.
PdfDocument doc = null;
try {
doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
URL svgUrl = null;
String svgPath = "...svgPathHere";
try {
svgUrl = new URL(svgPath);
} catch(MalformedURLException mue) {
System.out.println("Exception caught" + mue.getMessage() );
}
if (svgUrl == null){
try {
svgUrl = new File(svgPath).toURI().toURL();
} catch(Throwable th) {
System.out.println("Exception caught" + th.getMessage());
}
}
SvgConverter.drawOnDocument(svgUrl.openStream(), doc, 1, 100, 200); // 100 and 200 are x and y coordinate of the location to draw at
doc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Adding to the same above question, drawOnDocument() method of SvgConverter provides us the control to postion our svg through x and y cordinates. Is there a better way to handle postioning? (like Top-left, Top-right)
image pdf svg pdf-generation itext7
I am able to add the SVG image in PDF using the below code but alignment of image is going for a toss. I would like to keep image in a confined area (let's say 300 x 300 size always). If image is bigger, it should shrink/compress and fit into this size. How can we achieve this.
PdfDocument doc = null;
try {
doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
URL svgUrl = null;
String svgPath = "...svgPathHere";
try {
svgUrl = new URL(svgPath);
} catch(MalformedURLException mue) {
System.out.println("Exception caught" + mue.getMessage() );
}
if (svgUrl == null){
try {
svgUrl = new File(svgPath).toURI().toURL();
} catch(Throwable th) {
System.out.println("Exception caught" + th.getMessage());
}
}
SvgConverter.drawOnDocument(svgUrl.openStream(), doc, 1, 100, 200); // 100 and 200 are x and y coordinate of the location to draw at
doc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Adding to the same above question, drawOnDocument() method of SvgConverter provides us the control to postion our svg through x and y cordinates. Is there a better way to handle postioning? (like Top-left, Top-right)
image pdf svg pdf-generation itext7
image pdf svg pdf-generation itext7
edited Jan 21 at 19:51
Alexey Subach
4,79972143
4,79972143
asked Jan 18 at 19:59
dd12dd12
61
61
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
In your code you are dealing with quite low-level API. While your task is quite simple and low-level API is still sufficient here, with higher-level layout API you can achieve the goal much faster.
To start with, you can reuse your code to create a PdfDocument
and define the URL for the SVG image:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Then, instead of drawing the SVG image on a page immediately, you can convert it into an Image
object from layout
API which you can configure: scale to fit particular dimensions, set fixed position (left bottom point) and so on:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
To tie everything together, create high-level Document
object and add your image there. Don't forget to close the Document
instance. You don't need to close your original PdfDocument
anymore:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54260676%2fitext7-adding-svg-into-pdfdocument-and-aligning-svg-image-properly-within-the-pd%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
In your code you are dealing with quite low-level API. While your task is quite simple and low-level API is still sufficient here, with higher-level layout API you can achieve the goal much faster.
To start with, you can reuse your code to create a PdfDocument
and define the URL for the SVG image:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Then, instead of drawing the SVG image on a page immediately, you can convert it into an Image
object from layout
API which you can configure: scale to fit particular dimensions, set fixed position (left bottom point) and so on:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
To tie everything together, create high-level Document
object and add your image there. Don't forget to close the Document
instance. You don't need to close your original PdfDocument
anymore:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();
add a comment |
In your code you are dealing with quite low-level API. While your task is quite simple and low-level API is still sufficient here, with higher-level layout API you can achieve the goal much faster.
To start with, you can reuse your code to create a PdfDocument
and define the URL for the SVG image:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Then, instead of drawing the SVG image on a page immediately, you can convert it into an Image
object from layout
API which you can configure: scale to fit particular dimensions, set fixed position (left bottom point) and so on:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
To tie everything together, create high-level Document
object and add your image there. Don't forget to close the Document
instance. You don't need to close your original PdfDocument
anymore:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();
add a comment |
In your code you are dealing with quite low-level API. While your task is quite simple and low-level API is still sufficient here, with higher-level layout API you can achieve the goal much faster.
To start with, you can reuse your code to create a PdfDocument
and define the URL for the SVG image:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Then, instead of drawing the SVG image on a page immediately, you can convert it into an Image
object from layout
API which you can configure: scale to fit particular dimensions, set fixed position (left bottom point) and so on:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
To tie everything together, create high-level Document
object and add your image there. Don't forget to close the Document
instance. You don't need to close your original PdfDocument
anymore:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();
In your code you are dealing with quite low-level API. While your task is quite simple and low-level API is still sufficient here, with higher-level layout API you can achieve the goal much faster.
To start with, you can reuse your code to create a PdfDocument
and define the URL for the SVG image:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Then, instead of drawing the SVG image on a page immediately, you can convert it into an Image
object from layout
API which you can configure: scale to fit particular dimensions, set fixed position (left bottom point) and so on:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
To tie everything together, create high-level Document
object and add your image there. Don't forget to close the Document
instance. You don't need to close your original PdfDocument
anymore:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();
answered Jan 21 at 19:49
Alexey SubachAlexey Subach
4,79972143
4,79972143
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54260676%2fitext7-adding-svg-into-pdfdocument-and-aligning-svg-image-properly-within-the-pd%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown