PDF படிவத்தில் நிரப்பப்பட்ட உரையை ஏன் பிரித்தெடுக்க முடியாது?
AcroForm புல மதிப்புகள் பக்கத்தில் வரையப்பட்ட உரையை விட வேறு மூலத்திலிருந்து வந்தவை. பின்வருபவை ஒரு உரை புலத்தை உருவாக்க PyMuPDF ஐப் பயன்படுத்துகிறது, பின்னர் அதைப் படிக்க pypdf ஐப் பயன்படுத்துகிறது; XFA ஈடுபடவில்லை, மேலும் புல மதிப்பு காட்சி தோற்றத்துடன் ஒத்துப்போக வேண்டும் என்று கூறவில்லை. படிவம் இல்லாதபோது, அகராதியில் இல்லாத விசைகளைப் பயன்படுத்தி நேரடியாக அட்டவணைப்படுத்த வேண்டாம்.
PDF படிவத்தில் நிரப்பப்பட்ட உள்ளடக்கத்தை ஏன் பிரித்தெடுக்க முடியாது? ஒரு வாக்கியத்தின் முடிவு
படிவ புல மதிப்புகள் ஒரு சிறப்பு படிவ இடைமுகம் மூலம் படிக்கப்பட வேண்டும். extract_text() அவற்றை வெளியே கொண்டு வரும் என்று எதிர்பார்க்க முடியாது, மேலும் புலம் பிரித்தெடுத்தல் ஒரு தனி படியாக ஏற்றுக்கொள்ளப்பட வேண்டும்.
| உங்கள் நிலைமை | பரிந்துரைக்கப்பட்ட நடைமுறைகள் | காரணம் |
|---|---|---|
| புலம் உள்ளது மற்றும் நிரப்பப்பட வேண்டும். | புல மதிப்புகளைப் படிக்கவும் | புல மதிப்பு /AcroForm இல் சேமிக்கப்படுகிறது, இது பக்க உரையின் அதே ஆதாரம் அல்ல |
| கோப்பில் படிவம் இல்லை | படிவ நிலை இல்லை | அகராதியில் இல்லாத விசைகளை நேரடியாக அட்டவணைப்படுத்துவது பிழையை ஏற்படுத்தும் |
| கோப்பு XFA வடிவத்தில் உள்ளது | தனிப்பட்ட அடையாளம் மற்றும் செயலாக்க நோக்கம் வரையறுத்தல் | இந்தக் கட்டுரை XFA ஐ உள்ளடக்கியதாக இல்லை, மேலும் சாதாரண AcroForm குறியீடு மறைப்பதற்கு உறுதியளிக்கவில்லை |
| படிவத்தை நிரப்பும்போது "மாற்றங்களைச் சேமி" ப்ராம்ட் பாப்-அப் செய்யப்படுவதை விரும்பவில்லை | auto_regenerate ஐ False ஆக அமைக்கவும் | இயல்புநிலை True புலத் தோற்றத்தை மீண்டும் வழங்க வாசகரைத் தூண்டும் |
| காப்பகப்படுத்துவதற்கு அல்லது மொழிபெயர்ப்பதற்கு முன் நிலையான பதிப்பு தேவை | முதலில் flatten=True, பின்னர் /Widget சிறுகுறிப்பை அகற்றி அசலை வைத்திருங்கள் | தட்டையாக்குதல் என்பது மீள முடியாதது மற்றும் பின்னர் சாதாரண ஆவணங்களாக மட்டுமே செயலாக்க முடியும். |
நிரப்பப்பட்ட PDF படிவத்தைப் படிக்க நீங்கள் நிரலைப் பயன்படுத்தினால், திரும்பிய உரையில் "பெயர்:" மற்றும் "தேதி:" போன்ற நிலையான குறிச்சொற்கள் மட்டுமே இருப்பதையும், பயனர் உள்ளிட்ட உள்ளடக்கம் காணவில்லை என்பதையும் கண்டறிந்தால், இந்தக் கட்டுரை உங்களுக்கானது. பிரச்சனை பொதுவாக பாகுபடுத்தியில் இல்லை: படிவ புல மதிப்புகள் தனி /AcroForm கட்டமைப்புகளில் சேமிக்கப்படும், பக்க உள்ளடக்க ஸ்ட்ரீமில் அல்ல.
இந்த கட்டுரையைப் படித்த பிறகு, புல மதிப்புகள் மற்றும் பக்க உரைக்கு இடையிலான சேமிப்பக வேறுபாடுகளை நீங்கள் புரிந்துகொள்வீர்கள், உரை புலங்களை உருவாக்க PyMuPDF ஐ எவ்வாறு பயன்படுத்துவது என்பதை அறிவீர்கள், பின்னர் புல மதிப்புகளைப் படிக்க pypdf ஐப் பயன்படுத்தவும். படிவங்களை எழுதும்போதும், தட்டையாக்கும்போதும் என்ன கவனம் செலுத்த வேண்டும் என்பதையும் நீங்கள் அறிவீர்கள். இந்தக் கட்டுரை XFAஐ உள்ளடக்காது, அல்லது புல மதிப்புகள் அவற்றின் காட்சித் தோற்றத்துடன் கண்டிப்பாகப் பொருந்தும் என்பதற்கு எந்த உத்தரவாதமும் இல்லை.
படிவத் தரவு மற்றும் பக்க உள்ளடக்கம் ஏன் தனித்தனியாக சேமிக்கப்படுகிறது?
PDF இன் படிவ அமைப்பு இரண்டு பகுதிகளைக் கொண்டுள்ளது. பக்க உள்ளடக்க ஸ்ட்ரீம் நிலையான உரை மற்றும் கிராபிக்ஸ் வழங்குவதற்கு பொறுப்பாகும்; ஆவண மூலப்பொருளின் /AcroForm/Fields வரிசையில் ஊடாடும் புலங்கள் வரையறுக்கப்படுகின்றன. ஒவ்வொரு புலப் பொருளிலும் /T (பெயர்), /V (தற்போதைய மதிப்பு) போன்ற பண்புகள் உள்ளன, மேலும் காட்சி விளக்கக்காட்சியானது பக்கத்தில் உள்ள /Widget சிறுகுறிப்பு மூலம் மேற்கொள்ளப்படுகிறது.
எனவே, ஒரு புலம் உரையின் ஒரு பகுதியை பார்வைக்கு உள்ளடக்கியிருந்தாலும், அதன் தரவு அந்தப் பக்கத்திற்கான உரை பிரித்தெடுக்கும் எல்லைக்குள் இல்லை. இங்கே இரண்டு பொதுவான தவறான கருத்துக்கள் உள்ளன:
-
extract_text()இல் காணக்கூடிய அனைத்து எழுத்துகளும் இருக்க வேண்டும் என்பதைக் கவனியுங்கள். புல மதிப்பு உள்ளடக்க ஸ்ட்ரீமில் இல்லை, அது பிரித்தெடுக்கப்படாது. - பக்கக் கருத்துகளைக் கடந்து செல்வதன் மூலம் அனைத்து படிவ நிலைகளையும் மீட்டெடுக்க முடியும் என்று நம்பப்படுகிறது.
get_fields()ஒரு தருக்க புல கட்டமைப்பை வழங்குகிறது, இதில் படிநிலை உறவுகள் அல்லது பகிரப்பட்ட மதிப்புகள் கொண்ட ரேடியோ பொத்தான் குழுக்கள் இருக்கலாம்; பக்க கருத்துகள் பகுதியளவு ரெண்டரிங் நிகழ்வுகள் மட்டுமே. இரண்டும் வெவ்வேறு வழிகளில் அடிப்படையான பொருட்களைக் குறிப்பிடுகின்றன, மேலும் அவற்றைக் கலப்பது தரவு காணாமல் அல்லது நகல் எடுக்க வழிவகுக்கும்.
தொகுப்பு உதாரணம்: சரியான வாசிப்பு மற்றும் எல்லை கையாளுதல்
புல மதிப்புகளை எவ்வாறு பாதுகாப்பாக பிரித்தெடுப்பது மற்றும் விதிவிலக்குகளை எவ்வாறு கையாள்வது என்பதை நிரூபிக்க பின்வரும் எடுத்துக்காட்டு நினைவகத்தில் ஒரு PDF ஐ உருவாக்குகிறது. குறியீடு ஆர்ப்பாட்டங்களை கற்பிப்பதற்காக மட்டுமே மற்றும் உண்மையான உற்பத்தி சூழல்களில் செயல்படுத்தப்படாது. சரிபார்ப்புக்கான கட்டமைப்புடன் பொருந்தக்கூடிய PDF ஐ தயார் செய்யவும்.
from io import BytesIO
import pymupdf
from pypdf import PdfReader, PdfWriter
with pymupdf.open() as doc:
page = doc.new_page()
widget = pymupdf.Widget()
widget.field_name = "applicant_name"
widget.field_type = pymupdf.PDF_WIDGET_TYPE_TEXT
widget.field_value = "Alice"
widget.rect = pymupdf.Rect(50, 50, 200, 80)
page.add_widget(widget)
raw = doc.tobytes()
fields = PdfReader(BytesIO(raw)).get_form_text_fields()
assert isinstance(fields, dict)
assert fields["applicant_name"] == "Alice"
blank = PdfWriter()
blank.add_blank_page(width=200, height=200)
out = BytesIO()
blank.write(out)
assert not PdfReader(BytesIO(out.getvalue())).get_form_text_fields()
சார்புகளுக்கு pypdf>=3.0.0 ஐ நிறுவ வேண்டும். எடுத்துக்காட்டில் உள்ள இரண்டு PDF கோப்புகள் மேலே உள்ள முறையின்படி வாசகர்கள் அவற்றை தயாரிக்க வேண்டும்; குறியீட்டில் தலைமுறை தர்க்கம் இல்லை. இது API இன் எதிர்பார்க்கப்படும் நடத்தையை மட்டுமே வெளிப்படுத்துகிறது என்று வலியுறுத்துவது ஒரு குறிப்பிட்ட PDF இல் சரிபார்க்கப்பட்டுள்ளது என்று அர்த்தமல்ல. புல வாசிப்பு இடைமுகத்தின் முழுமையான விளக்கத்திற்கு, தயவுசெய்து PYPDF படிவ ஆவணம் ஐப் பார்க்கவும்.
களப் பிரித்தெடுப்புக்கான ஏற்றுக்கொள்ளும் அளவுகோல்கள் மற்றும் கையேடு மதிப்பாய்வுக்கான எல்லைகள்
குறியீடு டெமோக்கள் API அழைப்பு தர்க்கத்தை மட்டுமே சரிபார்க்கின்றன; இறுதி முதல் இறுதி விளைவு PDF ஜெனரேட்டர் இணக்கமானதா என்பதைப் பொறுத்தது. XFA, மறைகுறியாக்கப்பட்ட அல்லது சிதைந்த /AcroForm கட்டமைப்புகளை எதிர்கொள்ளும்போது, கட்டாய ஆட்டோமேஷனை விட கையேடு மதிப்பாய்வு தொடங்கப்பட வேண்டும்.
படிவங்களை எழுதும் போது சிக்கல்களை வழங்குதல் மற்றும் தட்டையான உத்திகள்
புலங்களை எழுதும்போது தானியங்கி மீளுருவாக்கத்தை அணைக்கவும்
update_page_form_field_values() ஆனது இயல்புநிலையாக இயக்கப்படுகிறது auto_regenerate=True, இது PDF ரீடரை புலத் தோற்றத்தை மீண்டும் வழங்கத் தூண்டுகிறது, இது கோப்பைத் திறக்கும் போது "மாற்றங்களைச் சேமி" தூண்டுதலை ஏற்படுத்தக்கூடும். நீங்கள் தெளிவாக காட்சி விளக்கக்காட்சியைப் புதுப்பிக்க வேண்டியிருந்தால் மற்றும் கீழ்நிலை பார்வையாளர் நடத்தையைக் கட்டுப்படுத்த முடியாவிட்டால் தயாரிப்பு சூழல் எப்போதும் False ஆக அமைக்கப்பட வேண்டும்.
நிலையான ஆவணங்கள் தேவைப்படும்போது, முதலில் அவற்றை தட்டையாக்குங்கள்
ஒரு படிவத்தை காப்பகப்படுத்துதல் அல்லது முன்-மொழிபெயர்ப்பு முன்செயலாக்கம் போன்ற முற்றிலும் நிலையான ஆவணமாக மாற்ற, நீங்கள் முதலில் flatten=True ஐ உள்ளடக்க ஸ்ட்ரீமில் புல மதிப்புகளை எழுத அமைக்கலாம், பின்னர் தொடர்பு உறுப்பை அகற்ற remove_annotations(subtypes="/Widget") ஐ அழைக்கலாம்.
இந்த செயல்பாடு மீள முடியாதது; அசல் நகலை வைத்திருக்க மறக்காதீர்கள். தட்டையான உரையை extract_text() மூலம் கைப்பற்ற முடியும், ஆனால் அது அதன் கட்டமைக்கப்பட்ட சொற்பொருளியலை இழந்துவிட்டது. அடுத்தடுத்த செயலாக்கம் ஒரு வழக்கமான ஆவணமாக கருதப்பட வேண்டும்.
📊 முக்கிய ஒப்பீடு
| விருப்பங்கள் | செய்முறை | தாக்கம் | குறிப்பு |
|---|---|---|---|
auto_regenerate=True (இயல்புநிலை) | எழுதும் போது புலத் தோற்றத்தை மீண்டும் ரெண்டர் செய்யவும் | காட்சி விளக்கக்காட்சி புதுப்பிக்கப்படும் | "மாற்றங்களைச் சேமி" வரியில் தோன்றலாம் |
auto_regenerate=False | எழுதும் போது தோற்றம் மீண்டும் உருவாக்கப்படாது | வாசகர் பாப்-அப்களைத் தவிர்க்கவும் | உங்கள் காட்சி விளக்கக்காட்சியைப் புதுப்பிக்க வேண்டும் என்றால், தனித்தனியாக உறுதிப்படுத்தவும் |
| படிவத்தை முன்பதிவு செய்யவும் | புலம் மற்றும் /Widget கருத்துகள் மாறாமல் உள்ளன | புல மதிப்புகளை படிவ இடைமுகம் மூலம் படிக்க முடியும் | extract_text() புல மதிப்புகளைக் கொண்டிருக்கவில்லை |
/Widget ஐ தட்டையாக்கி அகற்றவும் | புல மதிப்புகள் உள்ளடக்க ஸ்ட்ரீமில் எழுதப்படுகின்றன, மேலும் ஊடாடல் உறுப்பு அகற்றப்படுகிறது | உரையை extract_text() மூலம் கைப்பற்றலாம் | மீள முடியாதது, கட்டமைக்கப்பட்ட சொற்பொருளியலை இழந்துவிட்டது |
🎯 எந்த முறை உங்களுக்கு பொருத்தமானது?
நீங்கள் பூர்த்தி செய்யப்பட்ட படிவத்தைப் படிக்க வேண்டும் என்றால்
extract_text() ஐ நம்பாமல், /AcroForm இலிருந்து நேரடியாக புல மதிப்புகளைப் படிக்கவும்.
நீங்கள் உள்ளடக்கத்தை ஒரு படிவத்தில் எழுத வேண்டும் என்றால்
auto_regenerate ஐ False ஆக அமைக்கவும், வாசகர் சேமிப்பு அறிவுறுத்தல்களை பாப் அப் செய்வதைத் தவிர்க்கவும்; காட்சி காட்சியைப் புதுப்பிக்க, முதலில் கீழ்நிலை பார்வையாளரின் நடத்தையை சரிபார்க்கவும்.
காப்பகம் அல்லது மொழிபெயர்ப்புக்கு முன் உங்களுக்கு நிலையான பதிப்பு தேவைப்பட்டால்
முதலில் அசலை வைத்திருங்கள், பின்னர் flatten=True ஐப் பயன்படுத்தி, /Widget கருத்தை அகற்றவும், பின்னர் வழக்கமான ஆவணமாக கருதவும்.
நீங்கள் XFA அல்லது மறைகுறியாக்கப்பட்ட கோப்புகளை எதிர்கொண்டால்
கையேடு மதிப்பாய்வுக்கு மாறவும், நிலையான அக்ரோஃபார்ம் குறியீட்டைப் பயன்படுத்த வேண்டாம்.
❓ அடிக்கடி கேட்கப்படும் கேள்விகள் (FAQ)
1. extract_text() ஏன் படிவத்தில் நிரப்பப்பட்ட தகவலைப் பெற முடியாது?
ஏனென்றால், புல மதிப்புகள் /AcroForm கட்டமைப்பில் சேமிக்கப்படுகின்றன, அதே நேரத்தில் extract_text() பக்க உள்ளடக்க ஸ்ட்ரீமை மட்டுமே படிக்கிறது, மேலும் இரண்டும் வெவ்வேறு ஆதாரங்களைக் கொண்டுள்ளன.
2. அனைத்து புலங்களையும் பெற பக்க கருத்துகளை நேரடியாக கடந்து செல்லலாமா?
பரிந்துரைக்கப்படவில்லை. பக்க கருத்துகள் உள்ளூர் ரெண்டரிங் நிகழ்வுகளை மட்டுமே பிரதிபலிக்கின்றன, அதே நேரத்தில் get_fields() தர்க்கரீதியான புல கட்டமைப்புகளை வழங்குகிறது. ரேடியோ பொத்தான் குழுக்கள் போன்ற சந்தர்ப்பங்களில், இரண்டும் ஒத்துப்போகாமல் போகலாம்.
3. கோப்பில் படிவங்கள் இல்லை என்றால், குறியீட்டை எவ்வாறு கையாள வேண்டும்?
இது ஒரு படிவம் இல்லாத ஒரு வடிவமாக கருதப்பட வேண்டும்; அகராதியில் இல்லாத விசைகளை நேரடியாக குறியீட்டிற்கு பயன்படுத்த வேண்டாம், இல்லையெனில் பிழைகள் ஏற்படலாம்.
4. தட்டையான பிறகும் அதை ஒரு வடிவமாகப் பயன்படுத்த முடியுமா?
இல்லை. தட்டையானது ஒரு மீளமுடியாத செயல்பாடு: புல மதிப்புகள் உள்ளடக்க ஸ்ட்ரீமில் எழுதப்படுகின்றன, தொடர்பு கூறுகள் அகற்றப்படுகின்றன, பின்னர் அசல் நகல் எப்போதும் தக்கவைக்கப்படும்.
📝 சுருக்கம்
படிவ புல மதிப்புகள் பக்க உரையிலிருந்து தனித்தனியாக சேமிக்கப்படுகின்றன. படிவ இடைமுகத்தைப் பயன்படுத்தி பிரித்தெடுத்தல் செய்யப்பட வேண்டும், மேலும் புல பிரித்தெடுத்தல் ஏற்றுக்கொள்வதற்கான ஒரு சுயாதீனமான செயல்முறையாக கருதப்பட வேண்டும். எழுதுதல் மற்றும் தட்டையாக்குதல் இரண்டும் கவனமாக கையாளப்பட வேண்டும், அசல்களை வைத்திருக்க வேண்டும் மற்றும் சரிபார்ப்பு பட்டியலின்படி உருப்படி உருப்படியைச் சரிபார்க்க வேண்டும்.


