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

Clipped, Off-Page and White-on-White Text in PDF Extraction

See more PDF Text Extraction Examples

Demonstrates the "clippedText", "offPageText" and "obscuredText" filters. Text that a reader never sees - hidden by a clipping path, outside the crop box, or drawn in the same color as the box beneath it - is excluded by default, and the quality report notes what was skipped. Each kind can be included.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

-- The PDF used in this example is available at hidden_text.pdf

local pdf = chilkat.Pdf.new()
local success = pdf:load_file("qa_data/pdf/hidden_text.pdf")
if not success then
    print(pdf.last_error_text)
    return
end

local json = chilkat.JsonObject.new()
local jsonOut = chilkat.JsonObject.new()

-- The page has a visible paragraph plus three hidden lines: one drawn outside its clipping
-- rectangle, one below the crop box, and one in white on a white box.
success = pdf:extract_text("text", json, jsonOut)
if not success then
    print(pdf.last_error_text)
    return
end

print("---- default ----")
print(jsonOut:string_of("text"))

-- The quality report says what was left out.
local i = 0
local count_i = jsonOut:size_of_array("quality.pages[0].issues")
while i < count_i do
    jsonOut.i = i
    print("issue: " .. jsonOut:string_of("quality.pages[0].issues[i].code"))
    i = i + 1
end

-- Include everything.
json:update_string("clippedText", "include")
json:update_string("offPageText", "include")
json:update_string("obscuredText", "include")
success = pdf:extract_text("text", json, jsonOut)
if not success then
    print(pdf.last_error_text)
    return
end

print("---- clippedText, offPageText, obscuredText: include ----")
print(jsonOut:string_of("text"))

-- Sample output:

-- ---- default ----
-- Visible Text
--
-- This paragraph is visible. The page also carries three kinds of text a reader never sees.
--
-- End of the visible text.
-- issue: obscuredTextSkipped
-- issue: clippedTextSkipped
-- ---- clippedText, offPageText, obscuredText: include ----
-- Visible Text
--
-- This paragraph is visible. The page also carries three kinds of text a reader never sees.
--
-- CLIPPED: this line is drawn outside its clipping rectangle.
--
-- OBSCURED: this line is white on a white box.
--
-- End of the visible text.
--
-- OFFPAGE: this line sits below the crop box.