pptx-glimpse 0.10.2 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +14 -5
- package/dist/index.js +14 -5
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1692,6 +1692,7 @@ var standardParser = new import_fast_xml_parser.XMLParser({
|
|
|
1692
1692
|
attributeNamePrefix: "@_",
|
|
1693
1693
|
removeNSPrefix: true,
|
|
1694
1694
|
htmlEntities: true,
|
|
1695
|
+
trimValues: false,
|
|
1695
1696
|
isArray: (_name, jpath, _isLeafNode, _isAttribute) => {
|
|
1696
1697
|
const tag = String(jpath).split(".").pop() ?? "";
|
|
1697
1698
|
return ARRAY_TAGS.has(tag);
|
|
@@ -8060,7 +8061,7 @@ function renderTextBody(textBody, transform) {
|
|
|
8060
8061
|
const firstParaFontSizePt = getParagraphFontSize(paragraphs[0], defaultFontSize) * fontScale;
|
|
8061
8062
|
const firstLineBaselineOffsetPt = firstParaFontSizePt * defaultAscenderRatio;
|
|
8062
8063
|
yStart += firstLineBaselineOffsetPt * PX_PER_PT3;
|
|
8063
|
-
const textElement = `<text x="0" y="${yStart}">${tspans.join("")}</text>`;
|
|
8064
|
+
const textElement = `<text x="0" y="${yStart}" xml:space="preserve">${tspans.join("")}</text>`;
|
|
8064
8065
|
if (isVerticalText(bodyProperties.vert)) {
|
|
8065
8066
|
return `<g transform="translate(${originalWidth}, 0) rotate(90)">${textElement}</g>`;
|
|
8066
8067
|
}
|
|
@@ -9164,13 +9165,21 @@ async function convertPptxToPng(input, options) {
|
|
|
9164
9165
|
return results;
|
|
9165
9166
|
}
|
|
9166
9167
|
function mergeElements(masterElements, layoutElements, slideElements) {
|
|
9167
|
-
const
|
|
9168
|
+
const filterTemplatePlaceholders = (elements) => elements.filter((el) => {
|
|
9168
9169
|
if (el.type !== "shape") return true;
|
|
9169
9170
|
return !el.placeholderType;
|
|
9170
9171
|
});
|
|
9171
|
-
const
|
|
9172
|
-
const
|
|
9173
|
-
|
|
9172
|
+
const filterEmptySlidePlaceholders = (elements) => elements.filter((el) => !(el.type === "shape" && isEmptyPlaceholder(el)));
|
|
9173
|
+
const filteredMaster = filterTemplatePlaceholders(masterElements);
|
|
9174
|
+
const filteredLayout = filterTemplatePlaceholders(layoutElements);
|
|
9175
|
+
const filteredSlide = filterEmptySlidePlaceholders(slideElements);
|
|
9176
|
+
return [...filteredMaster, ...filteredLayout, ...filteredSlide];
|
|
9177
|
+
}
|
|
9178
|
+
function isEmptyPlaceholder(shape) {
|
|
9179
|
+
if (!shape.placeholderType) return false;
|
|
9180
|
+
const paragraphs = shape.textBody?.paragraphs;
|
|
9181
|
+
if (!paragraphs || paragraphs.length === 0) return true;
|
|
9182
|
+
return !paragraphs.some((p) => p.runs.some((r) => r.text.length > 0));
|
|
9174
9183
|
}
|
|
9175
9184
|
|
|
9176
9185
|
// src/font/font-collector.ts
|
package/dist/index.js
CHANGED
|
@@ -1655,6 +1655,7 @@ var standardParser = new XMLParser({
|
|
|
1655
1655
|
attributeNamePrefix: "@_",
|
|
1656
1656
|
removeNSPrefix: true,
|
|
1657
1657
|
htmlEntities: true,
|
|
1658
|
+
trimValues: false,
|
|
1658
1659
|
isArray: (_name, jpath, _isLeafNode, _isAttribute) => {
|
|
1659
1660
|
const tag = String(jpath).split(".").pop() ?? "";
|
|
1660
1661
|
return ARRAY_TAGS.has(tag);
|
|
@@ -8022,7 +8023,7 @@ function renderTextBody(textBody, transform) {
|
|
|
8022
8023
|
const firstParaFontSizePt = getParagraphFontSize(paragraphs[0], defaultFontSize) * fontScale;
|
|
8023
8024
|
const firstLineBaselineOffsetPt = firstParaFontSizePt * defaultAscenderRatio;
|
|
8024
8025
|
yStart += firstLineBaselineOffsetPt * PX_PER_PT3;
|
|
8025
|
-
const textElement = `<text x="0" y="${yStart}">${tspans.join("")}</text>`;
|
|
8026
|
+
const textElement = `<text x="0" y="${yStart}" xml:space="preserve">${tspans.join("")}</text>`;
|
|
8026
8027
|
if (isVerticalText(bodyProperties.vert)) {
|
|
8027
8028
|
return `<g transform="translate(${originalWidth}, 0) rotate(90)">${textElement}</g>`;
|
|
8028
8029
|
}
|
|
@@ -9126,13 +9127,21 @@ async function convertPptxToPng(input, options) {
|
|
|
9126
9127
|
return results;
|
|
9127
9128
|
}
|
|
9128
9129
|
function mergeElements(masterElements, layoutElements, slideElements) {
|
|
9129
|
-
const
|
|
9130
|
+
const filterTemplatePlaceholders = (elements) => elements.filter((el) => {
|
|
9130
9131
|
if (el.type !== "shape") return true;
|
|
9131
9132
|
return !el.placeholderType;
|
|
9132
9133
|
});
|
|
9133
|
-
const
|
|
9134
|
-
const
|
|
9135
|
-
|
|
9134
|
+
const filterEmptySlidePlaceholders = (elements) => elements.filter((el) => !(el.type === "shape" && isEmptyPlaceholder(el)));
|
|
9135
|
+
const filteredMaster = filterTemplatePlaceholders(masterElements);
|
|
9136
|
+
const filteredLayout = filterTemplatePlaceholders(layoutElements);
|
|
9137
|
+
const filteredSlide = filterEmptySlidePlaceholders(slideElements);
|
|
9138
|
+
return [...filteredMaster, ...filteredLayout, ...filteredSlide];
|
|
9139
|
+
}
|
|
9140
|
+
function isEmptyPlaceholder(shape) {
|
|
9141
|
+
if (!shape.placeholderType) return false;
|
|
9142
|
+
const paragraphs = shape.textBody?.paragraphs;
|
|
9143
|
+
if (!paragraphs || paragraphs.length === 0) return true;
|
|
9144
|
+
return !paragraphs.some((p) => p.runs.some((r) => r.text.length > 0));
|
|
9136
9145
|
}
|
|
9137
9146
|
|
|
9138
9147
|
// src/font/font-collector.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pptx-glimpse",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
4
4
|
"description": "A lightweight JavaScript library for rendering PowerPoint (.pptx) files as SVG or PNG in Node.js. No LibreOffice required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"license": "MIT",
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@resvg/resvg-wasm": "^2.6.2",
|
|
68
|
-
"fast-xml-parser": "^5.3
|
|
68
|
+
"fast-xml-parser": "^5.7.3",
|
|
69
69
|
"fflate": "^0.8.2",
|
|
70
70
|
"opentype.js": "^1.3.4"
|
|
71
71
|
},
|