feat: poppler working for some formats
This commit is contained in:
parent
f3b4b65c53
commit
a8f2cd4e9e
5 changed files with 125 additions and 1 deletions
115
src/converters/poppler.ts
Normal file
115
src/converters/poppler.ts
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
const { Poppler } = require("node-poppler");
|
||||
const poppler = new Poppler();
|
||||
|
||||
export const properties = {
|
||||
from: {
|
||||
text: ["pdf"],
|
||||
},
|
||||
to: {
|
||||
text: [
|
||||
"jpeg",
|
||||
"png",
|
||||
"tiff",
|
||||
"eps",
|
||||
"icc",
|
||||
"pdf",
|
||||
"svg",
|
||||
"ps",
|
||||
"html",
|
||||
"text",
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export function convert(
|
||||
filePath: string,
|
||||
fileType: string,
|
||||
convertTo: string,
|
||||
targetPath: string,
|
||||
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||
options?: any,
|
||||
): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const cairoFiles = [
|
||||
"jpeg",
|
||||
"png",
|
||||
"tiff",
|
||||
"eps",
|
||||
"icc",
|
||||
"pdf",
|
||||
"svg",
|
||||
"ps",
|
||||
];
|
||||
|
||||
if (cairoFiles.includes(convertTo)) {
|
||||
const popplerOptions: {
|
||||
jpegFile?: boolean;
|
||||
pngFile?: boolean;
|
||||
tiffFile?: boolean;
|
||||
epsFile?: boolean;
|
||||
iccFile?: boolean;
|
||||
pdfFile?: boolean;
|
||||
svgFile?: boolean;
|
||||
psFile?: boolean;
|
||||
} = {};
|
||||
|
||||
switch (convertTo) {
|
||||
case "jpeg":
|
||||
popplerOptions.jpegFile = true;
|
||||
break;
|
||||
case "png":
|
||||
popplerOptions.pngFile = true;
|
||||
break;
|
||||
case "tiff":
|
||||
popplerOptions.tiffFile = true;
|
||||
break;
|
||||
case "eps":
|
||||
popplerOptions.epsFile = true;
|
||||
break;
|
||||
case "icc":
|
||||
popplerOptions.iccFile = true;
|
||||
break;
|
||||
case "pdf":
|
||||
popplerOptions.pdfFile = true;
|
||||
break;
|
||||
case "svg":
|
||||
popplerOptions.svgFile = true;
|
||||
break;
|
||||
case "ps":
|
||||
popplerOptions.psFile = true;
|
||||
break;
|
||||
default:
|
||||
reject(`Invalid convertTo option: ${convertTo}`);
|
||||
}
|
||||
|
||||
poppler
|
||||
.pdfToCairo(filePath, targetPath, popplerOptions)
|
||||
.then(() => {
|
||||
resolve("success");
|
||||
})
|
||||
.catch((err: Error) => {
|
||||
reject(err);
|
||||
});
|
||||
} else if (convertTo === "html") {
|
||||
poppler
|
||||
.pdfToHtml(filePath, targetPath)
|
||||
.then(() => {
|
||||
resolve("success");
|
||||
})
|
||||
.catch((err: Error) => {
|
||||
reject(err);
|
||||
});
|
||||
} else if (convertTo === "text") {
|
||||
poppler
|
||||
.pdfToText(filePath, targetPath)
|
||||
.then(() => {
|
||||
resolve("success");
|
||||
})
|
||||
.catch((err: Error) => {
|
||||
reject(err);
|
||||
});
|
||||
} else {
|
||||
reject(`Invalid convertTo option: ${convertTo}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue