Sample code for 30+ languages & platforms
Visual FoxPro Requires Chilkat v11.7.0+

Extract Text from a PDF that Forbids Copying

See more PDF Text Extraction Examples

Demonstrates a PDF that opens without a password but whose permissions do not allow copying text. The "text", "markdown", "search" and "tables" operations fail with that reason; "assess" always works. Loading the PDF with the OwnerPassword property set grants owner rights, and extraction works.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loJsonOut

lnSuccess = 0

*  This example requires the Chilkat API to have been previously unlocked.
*  See Global Unlock Sample for sample code.

*  The PDF used in this example (owner password: owner-secret; copying not permitted) is available at no_copy_permission.pdf

loPdf = CreateObject('Chilkat.Pdf')
loJson = CreateObject('Chilkat.JsonObject')
loJsonOut = CreateObject('Chilkat.JsonObject')

*  The PDF opens without a password.
lnSuccess = loPdf.LoadFile("qa_data/pdf/no_copy_permission.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

*  Extracting text is refused, because the PDF's permissions do not allow copying.
lnSuccess = loPdf.ExtractText("text",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? "Extraction refused: " + loPdf.LastErrorText
ENDIF

*  "assess" reports only counts and ratings, never text, so it is always allowed.
lnSuccess = loPdf.ExtractText("assess",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

? "rating: " + loJsonOut.StringOf("quality.rating")

*  Load with the owner password to get owner rights, which include copying.
loPdf.OwnerPassword = "owner-secret"
lnSuccess = loPdf.LoadFile("qa_data/pdf/no_copy_permission.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

lnSuccess = loPdf.ExtractText("text",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

? loJsonOut.StringOf("text")

*  Sample output:

*  Extraction refused: ChilkatLog:
*    ExtractText:
*      ...
*        The PDF's permissions do not allow copying or extracting text (load it with the owner password to extract).
*      ...
*  rating: good
*  Visitor Leaflet
*  
*  Welcome to the harbor lighthouse. The tower is open on weekends from July to September.
*  
*  Please keep to the marked paths and do not climb on the breakwater.
*  
*  The lantern room is closed in high winds.

RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut