syntax = "proto3";
package ironpdfengineproto;
import "basic.proto";

option java_package = "com.ironsoftware.ironpdf.internal.proto";
option java_multiple_files = true;

message QPdfIsLinearizedRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }
  message InfoP {
    string password = 1;
  }
}

message QPdfSaveAsLinearizedRequestP {
  PdfDocumentP document = 1;
  string output_path = 2;
  string password = 3;
}

message QPdfSaveAsLinearizedFromBytesRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }

  message InfoP {
    string output_path = 1;
    string password = 2;
  }
}

message QPdfCompleteSavingAsPdfA4RequestP {
  PdfDocumentP document = 1;
  string output_path = 2;
  string password = 3;
}

message QPdfCompressAndSaveAsRequestP {
  PdfDocumentP document = 1;
  string output_path = 2;
  string password = 3;
  optional int32 jpeg = 4;
}

message QPdfCompressInMemoryRequestIdP {
  PdfDocumentP document = 1;
  string password = 2;
}

message QPdfCompressAndSaveAsFromBytesRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }

  message InfoP {
    string output_path = 1;
    string password = 2;
    optional int32 jpeg_quality = 3;
  }
}

message QPdfCompressInMemoryRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }

  message InfoP {
    string password = 1;
  }
}

message QPdfLinearizeInMemoryRequestIdP {
  PdfDocumentP document = 1;
  string password = 2;
}
 
message QPdfLinearizeInMemoryRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }
 
  message InfoP {
    string password = 1;
  }
}

message QPdfCompleteSavingAsPdfUA2RequestP {
  PdfDocumentP document = 1;
  string output_path = 2;
  string password = 3;
}

message QPdfToJsonRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }

  message InfoP {
    string password = 1;
    bool pretty_print = 2;
    bool mask_metadata = 3;
    int32 stream_data_mode = 4; // 0=None, 1=Hash, 2=Full
  }
}

message QPdfSaveAsJsonRequestStreamP {
  oneof request {
    InfoP info = 1;
    bytes pdf_bytes_chunk = 2;
  }

  message InfoP {
    string output_path = 1;
    string password = 2;
    bool pretty_print = 3;
    bool mask_metadata = 4;
    int32 stream_data_mode = 5; // 0=None, 1=Hash, 2=Full
  }
}

message QPdfCompressionFlagsP {
  bool   compress_streams              = 1;
  bool   coalesce_contents             = 2;
  bool   remove_unreferenced_resources = 3;
  bool   recompress_flate              = 4;
  int32  compression_level             = 5;
  string object_streams                = 6;  // "disable" | "preserve" | "generate"
  bool   decode_generalized_streams    = 7;
  int32  optimize_images_min_width     = 8;
  int32  optimize_images_min_height    = 9;
  int32  optimize_images_min_area      = 10;
  bool   optimize_images               = 11;
  optional int32 jpeg_quality          = 12;
}

message QPdfCompressAndSaveAsAdvancedRequestP {
  PdfDocumentP          document    = 1;
  string                output_path = 2;
  string                password    = 3;
  QPdfCompressionFlagsP flags       = 4;
}

message QPdfCompressAndSaveAsAdvancedFromBytesRequestStreamP {
  oneof request {
    InfoP info             = 1;
    bytes pdf_bytes_chunk  = 2;
  }

  message InfoP {
    string                output_path = 1;
    string                password    = 2;
    QPdfCompressionFlagsP flags       = 3;
  }
}
