@heripo/pdf-parser 0.2.2 → 0.2.3
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.js +81 -78
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -705,7 +705,13 @@ var DoclingServer = class _DoclingServer {
|
|
|
705
705
|
await _DoclingServer.killProcessOnPort(this.logger, this.port);
|
|
706
706
|
}
|
|
707
707
|
const doclingServePath = join(this.venvPath, "bin", "docling-serve");
|
|
708
|
-
const args = [
|
|
708
|
+
const args = [
|
|
709
|
+
"run",
|
|
710
|
+
"--host",
|
|
711
|
+
"127.0.0.1",
|
|
712
|
+
"--port",
|
|
713
|
+
this.port.toString()
|
|
714
|
+
];
|
|
709
715
|
this.logger.info(
|
|
710
716
|
"[DoclingEnvironment] Starting docling-serve on port",
|
|
711
717
|
this.port
|
|
@@ -2875,7 +2881,8 @@ var ChunkedPDFConverter = class {
|
|
|
2875
2881
|
};
|
|
2876
2882
|
|
|
2877
2883
|
// src/core/docling-conversion-executor.ts
|
|
2878
|
-
import { existsSync as existsSync4, rmSync as rmSync3 } from "fs";
|
|
2884
|
+
import { existsSync as existsSync4, mkdtempSync, rmSync as rmSync3 } from "fs";
|
|
2885
|
+
import { tmpdir } from "os";
|
|
2879
2886
|
import { join as join7 } from "path";
|
|
2880
2887
|
var DoclingConversionExecutor = class {
|
|
2881
2888
|
constructor(logger, client, timeout) {
|
|
@@ -2905,89 +2912,85 @@ var DoclingConversionExecutor = class {
|
|
|
2905
2912
|
this.logger.info(
|
|
2906
2913
|
"[PDFConverter] Results will be returned as ZIP to avoid memory limits"
|
|
2907
2914
|
);
|
|
2908
|
-
const
|
|
2915
|
+
const outputDir = join7(process.cwd(), "output", reportId);
|
|
2916
|
+
const workDir = mkdtempSync(join7(tmpdir(), "heripo-docling-"));
|
|
2917
|
+
const zipPath = join7(workDir, "result.zip");
|
|
2918
|
+
const extractDir = join7(workDir, "result_extracted");
|
|
2909
2919
|
try {
|
|
2910
|
-
const
|
|
2911
|
-
|
|
2912
|
-
task,
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
this.logger.info(
|
|
2922
|
-
"[PDFConverter] Conversion aborted after docling completion"
|
|
2920
|
+
const { httpUrl, server } = await this.resolveUrl(url);
|
|
2921
|
+
try {
|
|
2922
|
+
const task = await this.startConversionTask(httpUrl, conversionOptions);
|
|
2923
|
+
await trackTaskProgress(
|
|
2924
|
+
task,
|
|
2925
|
+
this.timeout,
|
|
2926
|
+
this.logger,
|
|
2927
|
+
"[PDFConverter]",
|
|
2928
|
+
{
|
|
2929
|
+
showDetailedProgress: true
|
|
2930
|
+
}
|
|
2923
2931
|
);
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
);
|
|
2937
|
-
} finally {
|
|
2938
|
-
if (server) {
|
|
2939
|
-
this.logger.info("[PDFConverter] Stopping local file server...");
|
|
2940
|
-
await server.stop();
|
|
2941
|
-
}
|
|
2942
|
-
}
|
|
2943
|
-
const cwd = process.cwd();
|
|
2944
|
-
const zipPath = join7(cwd, "result.zip");
|
|
2945
|
-
const extractDir = join7(cwd, "result_extracted");
|
|
2946
|
-
const outputDir = join7(cwd, "output", reportId);
|
|
2947
|
-
try {
|
|
2948
|
-
await this.processConvertedFiles(zipPath, extractDir, outputDir);
|
|
2949
|
-
if (url.startsWith("file://")) {
|
|
2950
|
-
await renderAndUpdatePageImages(
|
|
2951
|
-
url.slice(7),
|
|
2952
|
-
outputDir,
|
|
2932
|
+
if (abortSignal?.aborted) {
|
|
2933
|
+
this.logger.info(
|
|
2934
|
+
"[PDFConverter] Conversion aborted after docling completion"
|
|
2935
|
+
);
|
|
2936
|
+
const error = new Error("PDF conversion was aborted");
|
|
2937
|
+
error.name = "AbortError";
|
|
2938
|
+
throw error;
|
|
2939
|
+
}
|
|
2940
|
+
await downloadTaskResult(
|
|
2941
|
+
this.client,
|
|
2942
|
+
task.taskId,
|
|
2943
|
+
zipPath,
|
|
2953
2944
|
this.logger,
|
|
2954
2945
|
"[PDFConverter]"
|
|
2955
2946
|
);
|
|
2956
|
-
}
|
|
2957
|
-
|
|
2958
|
-
"[PDFConverter]
|
|
2959
|
-
|
|
2947
|
+
} finally {
|
|
2948
|
+
if (server) {
|
|
2949
|
+
this.logger.info("[PDFConverter] Stopping local file server...");
|
|
2950
|
+
await server.stop();
|
|
2951
|
+
}
|
|
2960
2952
|
}
|
|
2961
|
-
|
|
2962
|
-
this.
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2953
|
+
try {
|
|
2954
|
+
await this.processConvertedFiles(zipPath, extractDir, outputDir);
|
|
2955
|
+
if (url.startsWith("file://")) {
|
|
2956
|
+
await renderAndUpdatePageImages(
|
|
2957
|
+
url.slice(7),
|
|
2958
|
+
outputDir,
|
|
2959
|
+
this.logger,
|
|
2960
|
+
"[PDFConverter]"
|
|
2961
|
+
);
|
|
2962
|
+
} else {
|
|
2963
|
+
this.logger.warn(
|
|
2964
|
+
"[PDFConverter] Page image rendering skipped: only supported for local files (file:// URLs)"
|
|
2965
|
+
);
|
|
2966
|
+
}
|
|
2967
|
+
if (abortSignal?.aborted) {
|
|
2968
|
+
this.logger.info("[PDFConverter] Conversion aborted before callback");
|
|
2969
|
+
const error = new Error("PDF conversion was aborted");
|
|
2970
|
+
error.name = "AbortError";
|
|
2971
|
+
throw error;
|
|
2972
|
+
}
|
|
2973
|
+
this.logger.info("[PDFConverter] Executing completion callback...");
|
|
2974
|
+
await onComplete(outputDir);
|
|
2975
|
+
const duration = Date.now() - startTime;
|
|
2976
|
+
this.logger.info("[PDFConverter] Conversion completed successfully!");
|
|
2977
|
+
this.logger.info("[PDFConverter] Total time:", duration, "ms");
|
|
2978
|
+
} finally {
|
|
2979
|
+
if (cleanupAfterCallback) {
|
|
2980
|
+
this.logger.info(
|
|
2981
|
+
"[PDFConverter] Cleaning up output directory:",
|
|
2982
|
+
outputDir
|
|
2983
|
+
);
|
|
2984
|
+
if (existsSync4(outputDir)) {
|
|
2985
|
+
rmSync3(outputDir, { recursive: true, force: true });
|
|
2986
|
+
}
|
|
2987
|
+
} else {
|
|
2988
|
+
this.logger.info("[PDFConverter] Output preserved at:", outputDir);
|
|
2989
|
+
}
|
|
2966
2990
|
}
|
|
2967
|
-
this.logger.info("[PDFConverter] Executing completion callback...");
|
|
2968
|
-
await onComplete(outputDir);
|
|
2969
|
-
const duration = Date.now() - startTime;
|
|
2970
|
-
this.logger.info("[PDFConverter] Conversion completed successfully!");
|
|
2971
|
-
this.logger.info("[PDFConverter] Total time:", duration, "ms");
|
|
2972
2991
|
} finally {
|
|
2973
2992
|
this.logger.info("[PDFConverter] Cleaning up temporary files...");
|
|
2974
|
-
|
|
2975
|
-
rmSync3(zipPath, { force: true });
|
|
2976
|
-
}
|
|
2977
|
-
if (existsSync4(extractDir)) {
|
|
2978
|
-
rmSync3(extractDir, { recursive: true, force: true });
|
|
2979
|
-
}
|
|
2980
|
-
if (cleanupAfterCallback) {
|
|
2981
|
-
this.logger.info(
|
|
2982
|
-
"[PDFConverter] Cleaning up output directory:",
|
|
2983
|
-
outputDir
|
|
2984
|
-
);
|
|
2985
|
-
if (existsSync4(outputDir)) {
|
|
2986
|
-
rmSync3(outputDir, { recursive: true, force: true });
|
|
2987
|
-
}
|
|
2988
|
-
} else {
|
|
2989
|
-
this.logger.info("[PDFConverter] Output preserved at:", outputDir);
|
|
2990
|
-
}
|
|
2993
|
+
rmSync3(workDir, { recursive: true, force: true });
|
|
2991
2994
|
}
|
|
2992
2995
|
return null;
|
|
2993
2996
|
}
|
|
@@ -3042,7 +3045,7 @@ var DoclingConversionExecutor = class {
|
|
|
3042
3045
|
|
|
3043
3046
|
// src/core/image-pdf-converter.ts
|
|
3044
3047
|
import { existsSync as existsSync5, rmSync as rmSync4 } from "fs";
|
|
3045
|
-
import { tmpdir } from "os";
|
|
3048
|
+
import { tmpdir as tmpdir2 } from "os";
|
|
3046
3049
|
import { join as join8 } from "path";
|
|
3047
3050
|
var ImagePdfConverter = class {
|
|
3048
3051
|
constructor(logger) {
|
|
@@ -3059,7 +3062,7 @@ var ImagePdfConverter = class {
|
|
|
3059
3062
|
*/
|
|
3060
3063
|
async convert(pdfUrl, reportId) {
|
|
3061
3064
|
const timestamp = Date.now();
|
|
3062
|
-
const tempDir =
|
|
3065
|
+
const tempDir = tmpdir2();
|
|
3063
3066
|
const inputPath = join8(tempDir, `${reportId}-${timestamp}-input.pdf`);
|
|
3064
3067
|
const outputPath = join8(tempDir, `${reportId}-${timestamp}-image.pdf`);
|
|
3065
3068
|
try {
|