I want to check if the following base64 string is valid PDF in C#. In the given example, the base64 string is a valid PDF, in case there are any anomalies in the base64 string, how can I identify that? Are there any libraries or methods that I can use for this? From what I understand, the length of the base64 string is always a multiple of 4. What if the length of the base64 is a multiple of 4 and there are still some anomalies, i.e it is an invalid string, is there any way to identify that? Thanks in advance for all responses.
<image_type>pdf</image_type>
<image xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64">
JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==
</image>
var base64String2 = @"JVBERi0xLQWERjINCg0KMyAwIG9iag0KPDwNCi9FIDMwMjcNCi9IIFsgMTA2OSAxNDAgXQ0KL0wgMzI1OQ0KL0xpbmVhcml6ZWQgMQ0KL04gMQ0KL08gNg0KL1QgMzE0OQ0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQplbmRvYmoNCg0KeHJlZg0KMyA2DQowMDAwMDAwMDEyIDAwMDAwIG4NCjAwMDAwMDA5NDYgMDAwMDAgbg0KMDAwMDAwMTA2OSAwMDAwMCBuDQowMDAwMDAxMjEwIDAwMDAwIG4NCjAwMDAwMDE0MTYgMDAwMDAgbg0KMDAwMDAwMTUyMyAwMDAwMCBuDQp0cmFpbGVyDQo8PA0KL0FCQ3BkZiA3MDA4DQovSUQgWyA8NzA3Qjk0QkI2QkNDQjM4REREMzUyQzM3QzMwNkY4MjI+DQo8MkNBMkQ4NDA3MjIzRjNEMEEyQjlFRTZBRTNEQkNDODQ+IF0NCi9MZW5ndGggMA0KL1ByZXYgMzEzOQ0KL1Jvb3QgNCAwIFINCi9TaXplIDkNCi9UeXBlIC9YUmVmDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAWERCAgICAgICAgICAgICAgICASDFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCnN0YXJ0eHJlZg0KMA0KJSVFT0YNCjQgMCBvYmoNCjw8DQovT3BlbkFjdGlvbiBbIDYgMCBSDQovRml0IF0NCi9PdXRsaW5lcyAxIDAgUg0KL1BhZ2VNb2RlIC9Vc2VOb25lDQovUGFnZXMgMiAwIFINCi9UeXBlIC9DYXRhbG9nDQo+Pg0KZW5kb2JqDQoNCjUgMCBvYmoNCjw8DQovRmlsdGVyIC9GbGF0ZURlY29kZQ0KL0xlbmd0aCA0OQ0KL1MgNTINCj4+DQpzdHJlYW0NCnicY2BgYGZgYNFjUGBgYJcEkXCgAIUpDFgBiy4DWC8YMzBkg/UmQ+RYS0EkAH2mAxkNCmVuZHN0cmVhbQ0KDQplbmRvYmoNCg0KIDYgMCBvYmoNCjw8DQovQ29udGVudHMgWyA3IDAgUiBdDQovTWVkaWFCb3ggWyAwIDAgNjEyIDc5MiBdDQovUGFyZW50IDIgMCBSDQovUmVzb3VyY2VzIDw8DQovUHJvY1NldCBbIC9QREYNCi9UZXh0DQovSW1hZ2VCDQovSW1hZ2VDDQovSW1hZ2VJIF0NCi9YT2JqZWN0IDw8DQovSWFiYzUgOCAwIFINCj4+DQo+Pg0KL1R5cGUgL1BhZ2UNCj4+DQplbmRvYmoNCg0KNyAwIG9iag0KPDwNCi9MZW5ndGggNDUNCj4+DQpzdHJlYW0NCkJYDQpxDQo2MTIgMCAwIDc5MiAwIDAgY20NCi9JYWJjNSBEbw0KUQ0KRVgNCg0KZW5kc3RyZWFtDQoNCmVuZG9iag0KDQo4IDAgb2JqDQo8PA0KL0JpdHNQZXJDb21wb25lbnQgMQ0KL0NvbG9yU3BhY2UgL0RldmljZUdyYXkNCi9EZWNvZGVQYXJtcyA8PA0KL0NvbHVtbnMgMjU1MA0KL0sgLTENCi9Sb3dzIDMzMDANCj4+DQovRmlsdGVyIC9DQ0lUVEZheERlY29kZQ0KL0hlaWdodCAzMzAwDQovTGVuZ3RoIDEyNTQNCi9TdWJ0eXBlIC9JbWFnZQ0KL1R5cGUgL1hPYmplY3QNCi9XaWR0aCAyNTUwDQo+Pg0Kc3RyZWFtDQr//////////////////////////+WoaDLdVH/luLfwv1+F/8cf//5aZcQmAhAxCFCkoFIGEI2M7NRSBhMlYhAhJadYLgiC6ghisjrDODJxgiDqCC6clYZChgiDqCC+hAjyNOQXCEMNYECDCDCD0H6DCD09BhB+EGEHTTCeE/TT0tNP0wnTTT0/TT100/TTpp3oeqceqfpp0QvNELzREm+QnYkuaIXnIe1ElzRC8/RC80QvugQdBBug+gg8IOgg3CDwg6CDZIHoEHQIN6DcIOk/TwnhB6GE8IP9Bug9LSbq9J6bSb6bSb9LSb03T79P9PX0/03XV1vgtenW+nW/V0m9QVPj0/0/9P9QX8fv+v6r/8af9w//7/7/+kk7IcnSf0n/Sf0lv/IYCf////j/sgQM//////2Q0Vf/////7D//////4Yf//////Df//////KcCP////5G1zX8lwX//////5Vh//////+TATbX////tkQ20g//tpftpe2RDb8jvk7f////+R36+C/a////rkvbq1v3/tf7X7q0RWsKPvT/a+9fvXvt1tbW121+1/tftdbaTaXXa+2l+2l7aTDS2sMKw12GF+GF/hhftbWyF9MMJQwlsfsMJfsMJXshfTDBKxTFMf+xX7FSCfYpirTTWyGgf7X7T7TVpprDC/a/a9pq0wmFtfsL9hN7QahhBhBhZEC/hhfhhPhhBhS0y4hMCEaCCOIkuIIiS4gcSDEIEEiI4iIj5aurSyNP/tbpYa4YSO1UFSxXa7Xa4YXLVVhRj////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////lrkoZhktnkGmSxJUeGq4artV2q5GIr8NqvbVe6r3C/tV7hEIPX4S1+RAcgQpFRK1+agzggzgwRDBWFyKP+EGg8IOtL+mE8Jwtf6aenC0v6oacLS+kiEo5CdRC+x6/wg6CDoEG9L6pBunoPr9KtJ0m9L6q9PXpfBKtdJvrxR1fT/r8f6fS8L/9L0FSdb68IiwJ8el5DLE/+vkal/0vgv+l9f+JB2qF4RBu///IEd+R7P+iCEf/6ISr//hba/9L9v/X/koH9bXJe/+/aIoJ/rat1/1bXX/a2rDS/thWGFtf8MKxsMEv7F7Ff5BQ9kNA9r+04YW1/a2sNfwwmynFwwviVIQRyDCCMcfLZqaWRp/9rdLDXDCVirVq1DClskwsf//////////4AIAIAANCmVuZHN0cmVhbQ0KDQplbmRvYmoNCg0KMSAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KPj4NCmVuZG9iag0KDQoyIDAgb2JqDQo8PA0KL0NvdW50IDENCi9LaWRzIFsgNiAwIFIgXQ0KL1R5cGUgL1BhZ2VzDQo+Pg0KZW5kb2JqDQoNCnhyZWYNCjAgMw0KMDAwMDAwMDAwMCA2NTUzNSBmDQowMDAwMDAzMDI3IDAwMDAwIG4NCjAwMDAwMDMwNzEgMDAwMDAgbg0KdHJhaWxlcg0KPDwNCi9TaXplIDMNCj4+DQpzdGFydHhyZWYNCjE4Mw0KJSVFT0YNCg==";
Here, in the above mentioned base64String2, the base64 string will be validated successfully, but I can't open the pdf because it is corrupted.
How can we validate if the base64 string contains a non corrupted pdf ?