لديك مجلدات من تقارير PDF أو كشوف حسابات بنكية أو إيداعات تنظيمية، وتحتاج إلى أن تصل البيانات الجدولية الموجودة بداخلها إلى قاعدة بيانات أو جدول بيانات أو خط أنابيب تحليلي. نسخ الجداول ولصقها من عارض PDF إلى Excel يدمّر بنية الصفوف والأعمدة قبل الصفحات الثلاث الأولى. Total PDF Converter X يستخرج الجداول من ملفات PDF إلى CSV من سطر الأوامر، دفعةً، بدون واجهة رسومية. ثبّته على خادم Windows، استدعِه من سكربت أو عبر ActiveX، ودعه يعمل دون إشراف.
*.pdf) وسيعالج المحوّل كل الملفات المطابقة في تشغيلة واحدة-CSVDelimiter لمطابقة النظام المستهدف-Encoding للتعامل مع الأحرف غير اللاتينية بشكل سليم-CSVQuotation لحماية الفواصل الموجودة داخل قيم الخلايا
(30 يومًا، بدون بريد إلكتروني)
(ترخيص خادم، دائم)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
PDF تنسيق ذو تخطيط ثابت مصمَّم للتوزيع المرئي والطباعة. الجدول داخل PDF ليس كائن بيانات منظَّمًا — إنه سلسلة من شظايا النص المُموضَعة عند إحداثيات س/ص محدّدة على الصفحة. يعرضها العارض بطريقة تبدو كجدول، لكن لا توجد صفوف أو أعمدة أو خلايا في الملف نفسه. هذا هو السبب في أن النسخ واللصق اليدوي من PDF نادرًا ما ينتج إخراجًا جدوليًا نظيفًا.
CSV تنسيق بيانات نصي بسيط بسجل واحد لكل سطر وحقول مفصولة بمحدِّد. يستورد مباشرةً إلى Excel وGoogle Sheets وقواعد بيانات SQL وكائنات pandas DataFrame وR وPower BI وTableau وكل أداة ETL موجودة. حين تحتاج البيانات المحبوسة في PDF إلى الدخول في سير عمل تحليل أو محاسبة، يجب أن تصبح CSV أولًا.
| CSV | ||
|---|---|---|
| الغرض | التوزيع المرئي والطباعة والأرشفة | استيعاب البيانات وتحليلها |
| البنية | إحداثيات صفحة، لا جداول حقيقية | صفوف وأعمدة، أصلية |
| التحرير | صعب، يتطلب محرّر PDF | افتح في أي محرر نصي أو جدول بيانات |
| النسخ واللصق اليدوي | يفقد بنية الجدول | يحافظ على البنية بالضبط |
| سير العمل | مستند نهاية خط الأنابيب | بداية خط أنابيب البيانات |
تحفّظ: يعمل استخراج PDF إلى CSV الآلي على ملفات PDF النصية — الملفات المُولَّدة من أنظمة المحاسبة أو محركات التقارير أو حفظ-باسم-PDF من جدول بيانات أو قاعدة بيانات. ملفات PDF الممسوحة ضوئيًا (صور لورق) لا تحتوي على طبقة نصية وتتطلب OCR كخطوة معالجة مسبقة منفصلة قبل أن يكون أي استخراج CSV ممكنًا.
نزّل المُثبِّت من الرابط أعلاه وشغّله على خادم أو محطة عمل Windows. يستغرق التثبيت أقل من دقيقة. يحلّل المحوّل طبقة النص في PDF مباشرةً — لا حاجة لقارئ PDF خارجي ولا Acrobat ولا تثبيت Office.
افتح cmd.exe أو PowerShell. الملف التنفيذي للمحوّل هو PDFConverter.exe، ويقع في مجلد التثبيت (عادةً C:\Program Files\CoolUtils\TotalPDFConverterX\). أضفه إلى متغيّر PATH في النظام أو استخدم المسار الكامل في أوامرك.
أبسط أمر يستخرج الجداول من جميع ملفات PDF في مجلد إلى CSV:
PDFConverter.exe C:\Reports\*.pdf C:\Output\ -c CSV
يُعالج هذا كل ملف .pdf في C:\Reports\ ويحفظ ملفات CSV الناتجة في C:\Output\. كل ملف PDF يُنتج ملف CSV واحدًا بنفس الاسم الأساسي. تُسلسَل ملفات PDF متعددة الصفحات في ملف CSV واحد لكل ملف مصدر افتراضيًا.
تحكّم في صيغة CSV بعلامات إضافية:
PDFConverter.exe C:\Reports\*.pdf C:\Output\ -c CSV -CSVDelimiter ; -CSVQuotation " -Encoding UTF-8 -log C:\Logs\pdf2csv.log
-CSVDelimiter ; — فاصل الحقل (فاصلة، فاصلة منقوطة، علامة جدولة، شريط عمودي)-CSVQuotation " — غلّف الحقول النصية بعلامات اقتباس مزدوجة لحماية الفواصل داخل الخلايا-Encoding UTF-8 — ترميز الإخراج (UTF-8، UTF-16، ANSI) للمعالجة الصحيحة للأحرف غير اللاتينية-log C:\Logs\pdf2csv.log — كتابة سجل تحويل للتحققاحفظ أمرك في ملف .bat وجدوِله باستخدام Windows Task Scheduler:
@echo off "C:\Program Files\CoolUtils\TotalPDFConverterX\PDFConverter.exe" C:\Incoming\*.pdf C:\Archive\CSV\ -c CSV -CSVDelimiter ; -Encoding UTF-8 -log C:\Logs\pdf2csv.log
يُشغّل هذا الاستخراج كل ليلة (أو بأي فاصل زمني تحدّده) ويكتب ملف سجل لكي تتمكّن من التحقق من النتائج. اقرنه بخطوة لاحقة تستورد ملفات CSV إلى قاعدة بياناتك أو مستودع التحليلات.
يتضمّن Total PDF Converter X واجهة ActiveX كاملة. يمكنك استدعاء المحوّل من أي بيئة متوافقة مع COM — .NET أو VBScript أو PHP أو Python أو Ruby أو ASP. يتيح لك ذلك دمج استخراج PDF إلى CSV في تطبيق الويب الخاص بك أو بوابة الإنترانت أو سير عمل المستندات دون اللجوء إلى عملية سطر أوامر خارجية.
مثال (C#/.NET):
PDFConverterX Cnv = new PDFConverterX();
Cnv.Convert("C:\\Reports\\statement.pdf", "C:\\Output\\statement.csv", "-c CSV -CSVDelimiter ; -Encoding UTF-8 -log c:\\Logs\\pdf.log");
مثال (PHP):
$c = new COM("PDFConverter.PDFConverterX");
$c->convert("C:\\Reports\\statement.pdf", "C:\\Output\\statement.csv", "-c CSV -CSVDelimiter ; -Encoding UTF-8 -log c:\\Logs\\pdf.log");
يعمل نفس الاستدعاء من ASP.NET وVBScript وPython وRuby وPerl وJavaScript (Windows Script Host). يمكن لتطبيق الويب الخاص بك قبول ملفات PDF المرفوعة وإعادة بيانات CSV جاهزة للاستيراد إلى المستخدم في الوقت الفعلي.
| الميزة | المحوّلات عبر الإنترنت | Total PDF Converter X |
|---|---|---|
| المعالجة الدفعية | ملف واحد في كل مرة | عدد غير محدود من الملفات لكل دفعة |
| خصوصية الملفات | تُرفع الملفات إلى خادم طرف ثالث | الملفات لا تغادر جهازك |
| البيانات السرية | محفوف بالمخاطر — كشوف بنكية، رواتب، إيداعات | آمن — معالجة في الموقع |
| حدود حجم الملف | سقف نموذجي 5–25 ميجابايت | لا يوجد حد مفروض |
| التحكم في الفاصل | فاصلة ثابتة، لا خيار | فاصلة، فاصلة منقوطة، علامة جدولة، شريط عمودي |
| التحكم في الترميز | غالبًا ANSI فقط، يكسر Unicode | UTF-8، UTF-16، ANSI قابلة للاختيار |
| الأتمتة | يدوي فقط | سطر الأوامر، .bat، Task Scheduler، ActiveX |
| النشر على الخادم | غير ممكن | مصمّم للخوادم، لا حاجة لواجهة رسومية |
| يتطلب إنترنت | نعم | لا |
يحلّل المحوّل طبقة النص في PDF ويعيد بناء بنية الصفوف والأعمدة بناءً على الإحداثيات والمحاذاة. تُعالَج تخطيطات التقارير متعددة الأعمدة والرؤوس المدمجة والجداول التي تمتد عبر صفحات متعددة في تمريرة واحدة — وليس كسلسلة من الكلمات المفكَّكة.
صُمِّم Total PDF Converter X للاستخدام دون إشراف. لا نوافذ واجهة رسومية، لا مربعات حوار، لا مطالبات تأكيد، لا اعتمادية على Acrobat. يعمل بصمت من سطر الأوامر أو كجزء من خدمة — تمامًا ما يحتاجه خط أنابيب استخراج إنتاجي.
تظل كشوف الحساب التي تحتوي على علامات umlauts الألمانية أو علامات التشكيل البولندية أو أسماء التجار السيريلية أو الأطراف المقابلة الصينية مقروءة في إخراج CSV. -Encoding UTF-8 على سطر الأوامر، ويستورد الملف الناتج بشكل نظيف إلى أي قاعدة بيانات حديثة أو أداة BI.
تُحوّل أداة سطر الأوامر نفسها PDF إلى DOC وXLS وHTML وTXT وTIFF وJPEG وأكثر. تثبيت واحد يغطي كل هدف تحويل PDF قد تحتاجه. غيّر -c CSV إلى -c XLS وستحصل على مصنّف Excel بنفس مزايا الدفعات والأتمتة.
(30 يومًا، بدون بريد إلكتروني أو بطاقة ائتمان)
(ترخيص خادم، دائم)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
"تصلنا إصدارات الأرباح الفصلية بصيغة PDF ونمذجها في Excel. يعمل Total PDF Converter X من سطر الأوامر على مجلد كامل من إيداعات 10-Q ويُنتج CSV نظيفًا في أقل من دقيقة. تخرج الجداول متعددة الأعمدة والرؤوس المدمجة منظَّمة بشكل صحيح، وكان هذا هو العامل الحاسم الذي أوقف أداتين سابقتين جرّبناهما. علامة الفاصلة المنقوطة وعلامة UTF-8 تعنيان أن المُصدِرين الأوروبيين لم يعودوا يشوّهون استيرادنا."
Caroline Whitfield Senior Financial Analyst, Mid-Market Equity Research
"نستوعب مئات كشوف الحساب البنكية يوميًا للتسوية. مغلِّف سكربت .bat حول PDFConverter.exe يُسقط ملفات CSV في مجلد ساخن، ويلتقطها خط أنابيب ETL لدينا. صفر بصمة واجهة رسومية على الخادم، ولا ترخيص Acrobat، وملف السجل يمنحنا أثرًا ورقيًا للتدقيق. استغرق الإعداد حوالي ساعة بما في ذلك اختبار ActiveX من أداة C# الداخلية لدينا."
Rohan Mehta Data Engineer, Banking Operations
"غالبًا ما تسلّمنا المشاركات الميدانية دفاتر أستاذ عامة بصيغة PDF من أنظمة العميل. كان تحويل تلك إلى CSV يعني نسخًا ولصقًا مملًّا أو الدفع لاستيرادات IDEA. الآن نُشغّل المحوّل على نسخة مثبَّتة على USB ونحمّل CSV مباشرةً في أوراق العمل التحليلية لدينا. لا تزال ملفات PDF الممسوحة ضوئيًا تحتاج إلى OCR في الجهة الأمامية، لكن بالنسبة لملفات PDF الأصلية فإن اكتشاف الجدول موثوق. يمكن أن تكون الوثائق أكثر شمولًا، لكن الدعم ردّ في غضون يوم."
Anika Larsen Audit Specialist, Big Four Practice
PDFConverter.exe C:\Reports\*.pdf C:\Output\ -c CSV. يستخرج هذا الجداول من كل ملف PDF في المجلد المصدر ويكتبها كملفات CSV. أضف علامات مثل -CSVDelimiter ; أو -Encoding UTF-8 أو -log للتحكم في الإخراج.-CSVDelimiter متبوعًا بالحرف. -CSVDelimiter ; للفاصلة المنقوطة (شائعة في الإعدادات الإقليمية الأوروبية حيث الفاصلة هي الفاصل العشري)، -CSVDelimiter \t لعلامة الجدولة، أو -CSVDelimiter | للشريط العمودي. الافتراضي هو الفاصلة.-Encoding UTF-8 إلى سطر الأوامر. يُنتج هذا ملفات CSV بترميز UTF-8 تحافظ على علامات umlauts الألمانية وعلامات التشكيل البولندية والسيريلية والصينية واليابانية وأي أحرف Unicode أخرى موجودة في PDF. يُدعم أيضًا UTF-16 وANSI.-CSVQuotation " لتغليف الحقول النصية بعلامات اقتباس مزدوجة. يهرّب المحوّل علامات الاقتباس المضمَّنة وفقًا لـ RFC 4180، لذا تنجو القيم مثل "Smith, John" من رحلة ذهاب وعودة إلى Excel أو pandas أو أي محلّل CSV قياسي دون أن تكسر عدد الأعمدة.PDFConverter.PDFConverterX). يمكنك استدعاؤه من .NET أو PHP أو Python أو VBScript أو ASP أو Ruby أو Perl أو أي بيئة أخرى متوافقة مع COM لدمج استخراج PDF إلى CSV مباشرةً في تطبيقك.
string src="C:\\test\\Source.PDF";
string dest="C:\\test\\Dest.TIFF";
PDFConverterX Cnv = new PDFConverterX();
Cnv.Convert(src, dest, "-c TIFF -log c:\\test\\PDF.log");
MessageBox.Show("Convert complete!");
//العمل مع النماذج
Cnv.LoadFromFile(src);
Cnv.SetFormFieldValue(0, "Test Name");
Cnv.SaveToFile(src);
تحميل مثال .NET PDF Converter
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\PDFConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var msgPath = $@"{assemblyDirectoryPath}\MSG\MSG.pdf";
var outPath = Path.GetTempFileName() + ".tiff";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(msgPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & MSG files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $" {msgPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
#include <windows.h>
static const CLSID CLSID_PDFConverterX =
{0x6B411E7E, 0x9503,0x4793,{0xA2, 0x87, 0x1F, 0x3B, 0xA8, 0x78, 0xB9, 0x1C}};
static const IID IID_IPDFConverterX =
{0xEF633BED, 0xC414,0x49B0,{0x91, 0xFB, 0xC3, 0x9C, 0x3F, 0xE0, 0x08, 0x0D}};
#undef INTERFACE
#define INTERFACE IPDFConverterX
DECLARE_INTERFACE_(IPDFConverterX, IDispatch)
{
STDMETHOD(QueryInterface)(THIS_ REFIID, PVOID*) PURE;
STDMETHOD(Convert)(THIS_ LPCTSTR, LPCTSTR, LPCTSTR) PURE;
STDMETHOD(About)(THIS) PURE;
//const SourceFile: WideString; const DestFile: WideString; const Params: WideString; safecall;
};
typedef HRESULT (__stdcall *hDllGetClassObjectFunc) (REFCLSID, REFIID, void **);
int main () {
HRESULT hr;
if (CoInitialize(NULL)) {
printf ("Error in CoInitialize.");
return -1;
}
LPCTSTR lpFileName = "PDFConverter.dll";
HMODULE hModule;
hModule = LoadLibrary (lpFileName);
printf ("hModule: %d\n", hModule);
if (hModule == 0) {
printf ("Error in LoadLibrary.");
return -1;
}
hDllGetClassObjectFunc hDllGetClassObject = NULL;
hDllGetClassObject = (hDllGetClassObjectFunc) GetProcAddress (hModule, "DllGetClassObject");
if (hDllGetClassObject == 0) {
printf ("Error in GetProcAddress.");
return -1;
}
IClassFactory *pCF = NULL;
hr = hDllGetClassObject (&CLSID_PDFConverterX, &IID_IClassFactory, (void **)&pCF);
/* Can't load with different ID */
printf ("hr hDllGetClassObject: %d\n", hr);
if (!SUCCEEDED (hr)) {
printf ("Error in hDllGetClassObject.");
return -1;
}
IPDFConverterX *pIN;
hr = pCF->lpVtbl->CreateInstance (pCF, 0, &IID_IPDFConverterX, (void **)&pIN);
printf ("hr CreateInstance: %d\n", hr);
if (!SUCCEEDED (hr)) {
printf ("Error in hDllGetClassObject.");
return -1;
}
hr = pCF->lpVtbl->Release (pCF);
printf ("hr Release: %d\n", hr);
if (!SUCCEEDED (hr)) {
printf ("Error in Release.");
return -1;
}
hr = pIN->lpVtbl->About (pIN);
printf ("hr About: %d\n", hr);
if (!SUCCEEDED (hr)) {
printf ("Error in About.");
return -1;
}
hr = pIN->lpVtbl->Convert (pIN, "test.pdf", "test.html","-cHTML");
printf ("hr Convert: %d\n", hr);
if (!SUCCEEDED (hr)) {
printf ("Error in Convert.");
return -1;
}
return 0;
}
dim C
Set C=CreateObject("PDFConverter.PDFConverterX")
C.Convert "c:\source.PDF", "c:\dest.HTML", "-cHTML -log c:\pdf.log"
set C = nothing
dim C
Set C=CreateObject("PDFConverter.PDFConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Rresponse.AddHeader "Content-Disposition", "attachment; filename=test.TIFF"
Response.BinaryWrite c.ConvertToStream("C:\www\ASP\Source.PDF", "C:\www\ASP", "-cTIFF -log c:\PDF.log")
set C = nothing
$src="C:\\test.pdf";
$dest="C:\\test.tiff";
if (file_exists($dest)) unlink($dest);
$c= new COM("PDFConverter.PDFConverterX");
$c->convert($src,$dest, "-c TIFF -log c:\doc.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('PDFConverter.PDFConverterX')
src="C:\\test\\test.pdf";
dest="C:\\test\\test.tiff";
c.convert(src,dest, "-c TIFF -log c:\\test\\PDF.log");
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("PDFConverter.PDFConverterX")
src="C:\\test\\test.pdf";
dest="C:\\test\\test.tiff";
c.convert(src, dest, "-c TIFF -log c:\\test\\PDF.log");
if not os.path.exists(file_path):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c:=CreateOleObject('PDFConverter.PDFConverterX');
C.Convert('c:\test\source.pdf', 'c:\test\dest.tiff', '-c TIFF -log c:\test\PDF.log');
IF c.ErrorMessage<> Then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("PDFConverter.PDFConverterX");
c.Convert("C:\\test\\source.pdf", "C:\\test\\dest.tiff", "-c TIFF");
if (c.ErrorMessage!="")
alert(c.ErrorMessage)
use Win32::OLE; my $src="C:\\test\\test.pdf"; my $dest="C:\\test\\test.tiff"; my $c = CreateObject Win32::OLE 'PDFConverter.PDFConverterX'; $c->convert($src,$dest, "-c TIFF -log c:\\test\\PDF.log"); print $c->ErrorMessage if -e $dest;
قم بتنزيل النسخة التجريبية المجانية وحول ملفاتك في دقائق.
لا تحتاج إلى بطاقة ائتمان أو بريد إلكتروني.